使用TextDecorations下划线的WPF RadioButton样式

时间:2012-10-22 19:46:55

标签: wpf styles radio-button underline

我想更改WPF RadioButton的样式,以便未显示Bullet,当IsSelected为true时文本为粗体,文本不是粗体,带下划线,并且当IsSelected为false时,光标为手。我有它几乎工作,但我不能得到下划线的文字。到目前为止,这是我的XAML。

<Style TargetType="{x:Type RadioButton}">
  <Setter Property="Foreground" Value="DarkBlue" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type RadioButton}">
        <Border SnapsToDevicePixels="True">
          <ContentPresenter VerticalAlighment="Center" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsChecked" Value="True">
            <Setter Property="TextBlock.FontWeight" Value="UltraBold" />
          </Trigger>
          <Trigger Property="IsChecked" Value="False">
            <Setter Property="Cursor" Value="Hand" />
            <Setter Property="TextBlock.TextDecorations" Value="Underline" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

任何人都可以提供任何可以解释为什么当IsSelected为False时RadioButton的文本没有加下划线的建议将非常感激。

编辑: 根据提供的链接确定我可以将样式更改为以下内容。

<Style TargetType="{x:Type RadioButton}">
  <Setter Property="Foreground" Value="DarkBlue" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type RadioButton}">
        <TextBlock x:Name="TextBlock" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type RadioButton}}, Path=Content}" />
        <ControlTemplate.Triggers>
          <Trigger Property="IsChecked" Value="True">
            <Setter Property="TextBlock.FontWeight" Value="UltraBold" />
          </Trigger>
          <Trigger Property="IsChecked" Value="False">
            <Setter Property="Cursor" Value="Hand" />
            <Setter TargetName="TextBlock" Property="TextDecorations" Value="Underline" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

然后使用具有此样式的RadioButton。

<RadioButton Content"New" IsChecked="True" />
<RadioButton Content="Filter" />

现在显示两个没有Bullet的RadioButton,当IsSelected为true时,其内容为Bold,当IsSelected为false时,它不是粗体,带下划线并显示Hand光标。

我现在唯一的评论是,如果我将TextBlock的Text属性绑定到RadioButton的Content属性,那么如果RadioButton的内容不是String那么会失败吗?

1 个答案:

答案 0 :(得分:0)

是的,在内容不会显示的情况下,它会失败,相反,你会在内容上得到ToString()的结果,但是因为你想要收音机的带下划线/粗体文字,这似乎是你究竟想要什么?