是否可以使用当前主题创建BulletDecorator?

时间:2012-03-25 09:36:59

标签: wpf xaml themes

我正在使用众所周知的样式化列表框技术看起来像一个单选按钮组。 该样式为列表中的每个项目提供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,这样我就不需要引用显式主题了?

1 个答案:

答案 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