我想更改 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 为真时,其内容为粗体,当 IsSelected 为假时,它不加粗,加下划线并显示手形光标。
我现在唯一的评论是,如果我将 TextBlock 的 Text 属性绑定到 RadioButton 的 Content 属性,如果 RadioButton 的内容不是字符串,那会失败吗?