我正在使用众所周知的样式化列表框技术看起来像一个单选按钮组。 该样式为列表中的每个项目提供BulletDecorator。为了做到这一点,我需要引用一个特定的主题程序集,如PresentationFramework.Aero.dll,然后以我的风格显式使用它。
xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
<BulletDecorator.Bullet>
<theme:BulletChrome
Background="{TemplateBinding Control.Background}"
BorderBrush="{TemplateBinding Control.BorderBrush}"
IsRound="True"
RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}"
IsChecked="{TemplateBinding ListBoxItem.IsSelected}" />
</BulletDecorator.Bullet>
有没有办法创建一个使用当前或默认主题设置样式的BulletDecorator,这样我就不需要引用显式主题了?
答案 0 :(得分:1)
您无需重新创建RadioButton
模板...为什么不在RadioButton
中使用ItemContainerStyle
?
<Style x:Key="RadioButtonGroup" TargetType="ListBox">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<RadioButton IsChecked="{TemplateBinding IsSelected}" Content="{TemplateBinding Content}" GroupName="ListBoxItems" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
请注意,此方法存在一个问题:如果您在同一窗口中对多个ListBoxes
使用此样式,所有 RadioButtons
将是互斥的,因为它们将分享相同的GroupName
。有关解决方法,请参阅this article。