0

リストビューとラジオボタンのグループ(2つのラジオボタン)があります。チェックしたラジオボタンに基づいて、ListViewのスタイルとListViewItemのスタイルを変更したいと思います。可能であれば、コードビハインドは避けたいと思います。

ラジオボタン1->ListViewはListStyle1を表示し、ListViewItemはItemStyle1を表示しますラジオボタン2-> ListViewはListStyle2を表示し、ListViewItemはItemStyle2を表示します

ラジオボタンの代わりにコンボボックスを使用した同様の例を見つけましたが、「選択したアイテム」を参照できないため、私の場合は使用できませんでした。(WPFでスタイルを動的に切り替えることはできますか?

4

2 に答える 2

0

を使用して、チェックされているDataTriggerスタイルに基づいてスタイルを設定してみませんか?RadioButton

<Style x:Key="MyListViewStyle" TargetType="{x:Type ListView}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=RadioButton1, Path=IsChecked}" Value="True">
            <!-- Your Style Setters here -->
            <Setter PropertyName="ItemTemplate" Value="{StaticResource ItemTemplate1}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=RadioButton2, Path=IsChecked}" Value="True">
            <!-- Your Style Setters here -->
            <Setter PropertyName="ItemTemplate" Value="{StaticResource ItemTemplate2}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

ListBoxとはいえ、 a を のリストとして表示するスタイルを設定するのは非常に簡単ですRadioButtons。でアイテムのリストを表示しRadioButtonsたいが、それでもListBox選択動作を維持したい場合に、これを頻繁に行います。

<Style x:Key="RadioButtonListBoxStyle" TargetType="{x:Type ListBox}">
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
    <Setter Property="ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="{x:Type ListBoxItem}" >
                <Setter Property="Margin" Value="2, 2, 2, 0" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Border Background="Transparent">
                                <RadioButton
                                    Content="{TemplateBinding ContentPresenter.Content}" VerticalAlignment="Center"
                                    IsChecked="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
</Style>

使用例:

<ListBox ItemsSource="{Binding MyOptions}"
         SelectedItem="{Binding SelectedOption}"
         Style="{StaticResource RadioButtonListBoxStyle}" />
于 2012-07-16T14:33:27.663 に答える
0

悪いように思えるかもしれませんが、スタイルの選択をシミュレートするリスト (スタイルとテンプレートを再定義する) をお勧めします。

以下を使用して (または類似のものを使用して)、要素の編成を定義できます。

        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel  Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <RadioButton IsChecked="{Binding Mode=TwoWay, Path=IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem, Mode=FindAncestor}}">
                    <TextBlock Text="{Binding StyleName}"/>
                </RadioButton>
            </DataTemplate>
        </ListBox.ItemTemplate>

そのため、ItemsSource のカスタム クラスを作成する必要があります。バインディングのカスタマイズに加えて、SelectedValue または SelectedItem。

于 2012-07-15T23:40:42.167 に答える