Как я могу стилизовать определенные списки 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}" />