Подчеркните текст ToggleButton OnMouseOver в WPF

Как я могу 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"/>

person Vahid    schedule 06.01.2015    source источник
comment
Проверьте эту ссылку, которая показывает интересный способ добиться подчеркивания для ContentPresenter в целом, заключая ContentPresenter в TextBlock, а затем используя TextBlock в качестве цели триггера, тем самым подчеркивая весь ContentPresenter.   -  person learningcs    schedule 07.01.2015
comment
Спасибо, ссылка, которую вы предоставили, помогла мне решить проблему.   -  person Vahid    schedule 07.01.2015


Ответы (1)


Если вы хотите установить TextDecorations="Underline" в стиле, вам нужно использовать TextBlock вместо ContentPresenter (или любой другой элемент управления).

Да, это свойство зависимости, но это не attached свойство — это просто свойство зависимости, определенное и предоставляемое TextBlock, и оно прекрасно видно в ILSpy:

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

Таким образом, это свойство может быть установлено только для управления типом TextBlock.

person Anatoliy Nikolaev    schedule 06.01.2015