【问题标题】:Underline the text of the ToggleButton OnMouseOver in WPF在 WPF 中为 ToggleButton OnMouseOver 的文本添加下划线
【发布时间】:2015-03-04 15:09:51
【问题描述】:

当鼠标悬停在ToggleButton 上时,我如何Underline ToggleButton 的文本?我正在使用下面的代码,但是当我将鼠标悬停时没有任何反应。

<Style x:Key="BaseToggleButton" TargetType="ToggleButton">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="TextOptions.TextFormattingMode" Value="Display"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="Margin" Value="0 3 0 3"/>
    <Setter Property="FontSize" Value="11"/>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ToggleButton">
                <StackPanel Orientation="Horizontal" x:Name="Border">
                    <Image Width="13" Height="13" Source="{StaticResource ColumnsLayoutMiniIcon}">
                    </Image>
                    <Border x:Name="Content"
                            Padding="4 2 4 2"
                            Margin="5 0 0 0">
                        <ContentPresenter HorizontalAlignment="Center" 
                                          VerticalAlignment="Center" 
                                          RecognizesAccessKey="True" />

                    </Border>                        
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="Border" Property="Cursor" Value="Hand"/>
                        <Setter TargetName="Content" Property="TextBlock.TextDecorations" Value="Underline"/>
                    </Trigger>
                    <Trigger Property="IsChecked" Value="False">

                    </Trigger>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter TargetName="Content" Property="Background" Value="#acacac"></Setter>
                        <Setter TargetName="Content" Property="TextBlock.Foreground" Value="Black"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这很奇怪,因为这部分代码有效:

<Setter TargetName="Border" Property="Cursor" Value="Hand"/>

【问题讨论】:

  • 查看这个link,它展示了一种有趣的方法来为整个 ContentPresenter 实现下划线,方法是将 ContentPresenter 封装在 TextBlock 中,然后使用 TextBlock 作为触发器的目标,从而在整个 ContentPresenter。
  • 感谢您提供的链接帮助我解决了问题。

标签: c# wpf styles onmouseover togglebutton


【解决方案1】:

如果要在 Style 中设置TextDecorations="Underline",则需要使用TextBlock 而不是ContentPresenter(或任何其他控件)。

是的,它是依赖属性,但它不是attached 属性,是由TextBlock 定义和公开的普通依赖属性,它在ILSpy 中完全可见:

TextBlock.TextDecorationsProperty = Inline.TextDecorationsProperty.AddOwner(typeof(TextBlock),
                                    new FrameworkPropertyMetadata(new FreezableDefaultValueFactory(TextDecorationCollection.Empty), 
                                    FrameworkPropertyMetadataOptions.AffectsRender));

因此,只能设置该属性来控制TextBlock的类型。

【讨论】:

    猜你喜欢
    • 2012-09-07
    • 2014-10-14
    • 2011-08-01
    • 1970-01-01
    • 2012-04-18
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多