40028


C#(Visual studio2015)でComboBoxの値に応じてレイアウトを変更したいです。

xamlファイル

[code]

        <ComboBox Grid.Row="1" Grid.Column="1" 
                  ItemsSource="{Binding TypeCollection}"
                  DisplayMemberPath="Text"
                  Width="140" HorizontalAlignment="Left" />
       <TextBlock Grid.Row="2" Text="test A!" HorizontalAlignment="Right" VerticalAlignment="Center"/>★１
       <TextBlock Grid.Row="3" Text="test B!" HorizontalAlignment="Right" VerticalAlignment="Center"/>★２
    
[/code]

TypeCollectionにはAとBが選択できるようになっているのですが、  
Aを選んだ時に★１、Bを選んだ時に★２のテキストを表示させたいです。

xamlでそのような条件わけができるのでしょうか？  
それともCSファイル側で行うべきなのでしょうか？


CC BY-SA 3.0
2017-12-04T09:46:03.903
40026
2017-12-04T12:25:35.700
12842
question
c# visual-studio
C#でComboBoxの値に応じてレイアウトを変更したい


`ComboBox`には選択値に応じて変化するプロパティがいくつかありますので、そのいずれかに対する`{Binding}`を作成すれば`DataTrigger`に使用することができます。手順としては

  1. `<ComboBox>`に`Name`を指定する
  2. `<TextBlock>`に`<Style>`を追加する
  3. `<Style.Triggers>`に`<DataTrigger>`を追加し、`Binding`に`ElementName`として`1.`を、`Path`に`Selected****`を指定する。
  4. `<DataTrigger>`に`Visibility`を変更する`<Setter>`を追加する。

となり、例えば`SelectedIndex`が分かっている場合は

[code]

    <ComboBox
        x:Name="comboBox" />
    <TextBlock>
        <TextBlock.Style>
            <Style
                TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger
                        Binding="{Binding ElementName=comboBox, Path=SelectedIndex}"
                        Value="1">
                        <Setter
                            Property="Visibility"
                            Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
        test A!
    </TextBlock>
    
[/code]

のようになります。

ただ`ComboBox.ItemsSource`をバインドしているのに特定のインデックスや値を要素を想定したトリガーをビュー側に記述するのは行儀が良いとはいいがたいです。コーディング量も`DataContext`内で適切に実装した方が少なくなりますので、参考程度に考えてください。


CC BY-SA 3.0
2017-12-04T12:25:35.700
40028
2017-12-04T12:25:35.700
5750
40026
answer