質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

2207閲覧

C# WPF StackPanel内に設置したListBoxの高さを自動調整したい

fama

総合スコア105

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2020/09/18 22:05

現在、StackPanel内に

・RadioBox
・Label
・ListBox
・Button

を設置しています。

※ StackPanelの外にはGridがあります。

WPF

1<StackPanel> 2 <RadioButton Name="R1" IsChecked="True" Content="テスト" Margin="5,5,5,5"/> 3 <RadioButton Name="R2" Content="テスト" Margin="5,5,5,5"/> 4 <Button x:Name="B1" Content="テスト" Margin="2,2,2,2" Visibility="{Binding Path=IsChecked,ElementName=R1, Converter={StaticResource BoolVisibilityConverter}}"/> 5 <ListBox x:Name="L1" Margin="2,2,2,2" Background="#FFBCF2F8" Visibility="{Binding Path=IsChecked,ElementName=R1, Converter={StaticResource BoolVisibilityConverter}}"></ListBox> 6 <Label Content="Log" Margin="2,2,2,2"/> 7 <ListBox x:Name="R2" Margin="2,2,2,2" Background="#FFBCF2F8"></ListBox> 8 <Button x:Name="B2" Content="テスト" Margin="2,2,2,2"></Button> 9</StackPanel>

この際、ListBoxの高さをStackPanel内の余白いっぱいの高さに自動的に調整するにはどのようにすれば良いでしょうか?

このソースコードの場合、ListBoxが2つありますので、この2つが余白内で均等に余った高さを分配して表示するようにしたいです。

これまでは、StackPanelを使用せずに、

WPF

1<Grid.RowDefinitions> 2 <RowDefinition Height="Auto"></RowDefinition> 3 <RowDefinition Height="Auto"></RowDefinition> 4 <RowDefinition Height="Auto"></RowDefinition> 5 <RowDefinition></RowDefinition> 6 <RowDefinition Height="Auto"></RowDefinition> 7 <RowDefinition></RowDefinition> 8 <RowDefinition Height="Auto"></RowDefinition> 9</Grid.RowDefinitions>

このような形で<Grid.RowDefinitions>により設定していたのですが、RadioBoxのチェックの有無によって特定のListBoxやButtonを非表示にしたく、StackPanelに切り替えた状態となります。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2020/09/19 06:39

ListBoxの所の RowDefinition の Height="*" じゃ駄目?
fama

2020/09/19 09:39

<Grid.RowDefinitions>で設定致しました場合、RadioBoxのチェックの有無によって非表示にしたいButtonやListBoxがございます。 その場合はどのように対応すれば良いかわかりますでしょうか? Visibility="{Binding Path=IsChecked,ElementName=R1, Converter={StaticResource BoolVisibilityConverter}}" を記載する事で、このButtonやListBox自体は非表示になるのですが、<Grid.RowDefinitions>内の項目が削除出来ているわけではありませんので、表示バランスがおかしくなってしまう現象がございまして・・・
hihijiji

2020/09/21 01:21

BoolVisibilityConverterが"Collapsed"を返せば表示領域も無くなるはずだけど?
guest

回答1

0

ベストアンサー

GridStackPanelもそういう性質だから仕方がないのですが、いくつかアイデアがありました。
Hide grid row in WPF - Stack Overflow

xamlだけでやるとこんな感じです(2か所以上あるならコンバータのほうがいいですね)

xml

1<Window 2 x:Class="Questions292804.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="800" 6 Height="450"> 7 <Window.Resources> 8 <BooleanToVisibilityConverter x:Key="BoolVisibilityConverter" /> 9 </Window.Resources> 10 <Grid> 11 <Grid.RowDefinitions> 12 <RowDefinition Height="Auto" /> 13 <RowDefinition Height="Auto" /> 14 <RowDefinition Height="Auto" /> 15 <RowDefinition> 16 <RowDefinition.Style> 17 <Style TargetType="RowDefinition"> 18 <Setter Property="Height" Value="*" /> 19 <Style.Triggers> 20 <DataTrigger Binding="{Binding IsChecked, ElementName=R1}" Value="False"> 21 <Setter Property="Height" Value="0" /> 22 </DataTrigger> 23 </Style.Triggers> 24 </Style> 25 </RowDefinition.Style> 26 </RowDefinition> 27 <RowDefinition Height="Auto" /> 28 <RowDefinition /> 29 <RowDefinition Height="Auto" /> 30 </Grid.RowDefinitions> 31 <RadioButton 32 Name="R1" 33 Margin="5,5,5,5" 34 Content="テスト" 35 IsChecked="True" /> 36 <RadioButton 37 Name="R2" 38 Grid.Row="1" 39 Margin="5,5,5,5" 40 Content="テスト" /> 41 <Button 42 x:Name="B1" 43 Grid.Row="2" 44 Margin="2,2,2,2" 45 Content="テスト" 46 Visibility="{Binding IsChecked, ElementName=R1, Converter={StaticResource BoolVisibilityConverter}}" /> 47 <ListBox 48 x:Name="L1" 49 Grid.Row="3" 50 Margin="2,2,2,2" 51 Background="#FFBCF2F8" /> 52 <Label 53 Grid.Row="4" 54 Margin="2,2,2,2" 55 Content="Log" /> 56 <ListBox 57 x:Name="L2" 58 Grid.Row="5" 59 Margin="2,2,2,2" 60 Background="#FFBCF2F8" /> 61 <Button 62 x:Name="B2" 63 Grid.Row="6" 64 Margin="2,2,2,2" 65 Content="テスト" /> 66 </Grid> 67</Window>

投稿2020/09/19 04:08

編集2023/07/23 06:29
TN8001

総合スコア9321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fama

2020/09/19 10:03

非常にわかりやすくアドバイスを頂きましてありがとうございます。 教えて頂きました方法にて解決する事が出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問