Как я могу стилизовать определенные списки WPF, чтобы они были переключателями?

Я хочу, чтобы некоторые элементы из моих списков были в стиле радиокнопок. Вот код, который у меня есть, но этот стиль применяется к каждому элементу списка.

<Window.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <RadioButton Content="{TemplateBinding Content}"
                                 IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

Как я могу сделать что-то, чтобы я мог назначить список, чтобы иметь переключатели. Я думаю, что обозначение будет выглядеть примерно так:

<ListBox Name="ListBox1" Width="120" Visibility="Visible" Background="{x:Null}" BorderThickness="0" Style="{StaticResource radioListBox}">

Я знаю, что часть проблемы заключается в том, что это только стили списков элементов, но я не уверен, как стилизовать сам список. Я, конечно, предпочел бы добавить в фон и свойства границы.

Любая помощь будет оценена.

1 ответ

Решение

Вы должны дать свой Style ключ:

<Window.Resources>
    <Style x:Key="radioListBoxItem" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <RadioButton Content="{TemplateBinding Content}"
                                 IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

И тогда вы примените его к ListBox лайк:

<ListBox ItemContainerStyle="{StaticResource radioListBoxItem}" />

Если вы хотите создать стиль для ListBox который содержит элементы списка радио и некоторые другие свойства, вы также можете сделать это:

<Style x:Key="radioListBox" TargetType="{x:Type ListBox}">
    <Setter Property="ItemContainerStyle" Setter="{StaticResource radioListBoxItem}" />
    <Setter Property="Background" Value="Navy" />
</Style>

И вы примените это:

<ListBox Style="{StaticResource radioListBox}" />
Другие вопросы по тегам