0

简短版本:我想在 DependencyObject 中添加下划线的任何内容,例如,在这种情况下,我可以设置字体大小和颜色,但不能将其设置为带下划线:

<StackPanel TextElement.FontWeight="Bold" TextElement.Foreground="Red" Inline.TextDecorations="Underline">
    <TextBlock Text="This ">
    </TextBlock>
    <TextBlock><Run Text="is "></Run><Run Text="a test"></Run></TextBlock>
</StackPanel>

那么如何在一个位置指定我希望所有文本都加下划线呢?

长版:我正在创建一个像 ContentPresenter 一样工作的超链接控件。使用我的超链接控件的程序员可以将内容放入控件中并指定一个 DataTemplate 来呈现其内容。在 MouseOver 我想要一个触发器来将字体设置为红色并在文本下划线。我可以很容易地将颜色更改为红色,但下划线被证明是一个问题。

<Trigger Property="IsMouseOver" Value="True">
    <Setter Property="Inline.TextDecorations" Value="Underline"></Setter>
    <Setter Property="TextElement.Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ContentHyperlink}}, Path=ActiveColor}"></Setter>
</Trigger>
4

1 回答 1

0

查看评论中发布的链接,看起来可能没有一个好的 xaml 方法来执行此操作。我目前正在使用 C# 代码,它运行良好。为了社区的利益,这是我的解决方案。欢迎就如何更好地做到这一点提出任何意见。我只是捕获 MouseLeave 和 MouseEnter 事件并在那里显示下划线。

    void Control_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        WPFHelper.EnumerateChildren<TextBlock>(this, true).ForEach(c => c.TextDecorations = null);
    }

    void Control_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        WPFHelper.EnumerateChildren<TextBlock>(this, true).ForEach(c => c.TextDecorations = TextDecorations.Underline);
    }

WPFHelper 类简单地枚举 DependencyObject 的所有子项,而 ForEach 是一个扩展方法,它只为每个项目执行 lambda 表达式内的操作。

于 2012-10-30T03:13:23.763 回答