gpt4 book ai didi

wpf - 使用单一样式同时设置 Hyperlink 和 TextBlock 的样式?

转载 作者:行者123 更新时间:2023-12-04 19:15:17 30 4
gpt4 key购买 nike

我有两种类型的文本需要遵循基于枚举的相似着色规则:

 public enum Modes
{
A,
B,
C
}

带有 DataTrigger 标记的 Style 用于着色:

      <Style TargetType="SEE BELOW" x:Key="Coloring">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=.}" Value="A">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=.}" Value="B">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=.}" Value="C">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>

一个使用场景是带有嵌套 System.Windows.Controls.TextBlockSystem.Windows.Documents.Hyperlink:

<Hyperlink><TextBlock/></Hyperlink>

另一个只是一个简单的TextBlock:

<TextBlock Style="{StaticResource Coloring}" Text="yada"/>

当然,我可以同时设置 TextBlock 元素的样式:

<TextBlock Style="{StaticResource Coloring}" Text="yada"/>
<Hyperlink><TextBlock Style="{StaticResource Coloring}"/></Hyperlink>

但这无法为超链接案例的下划线设置样式。

如果我尝试跨两种类型设置样式:

<TextBlock Style="{StaticResource Coloring}" Text="yada"/>
<Hyperlink Style="{StaticResource Coloring}"><TextBlock/></Hyperlink>

然后样式会失败,因为(显然)没有共同的祖先类型可用于样式的 TargetType 属性。

由于这最终应该是一个可配置的东西,因此目标是拥有一个 XAML 文档,该文档定义了这些文本 block 的颜色映射模式。因此,我不愿意使用定义相同映射的两种冗余样式(一种用于超链接,一种用于文本 block )。

那么……问题是:如何在没有冗余 Style XAML block 的情况下一致地设置两种情况的样式?

最佳答案

您可以通过在样式本身中绑定(bind)它们来强制超链接具有与其父文本 block 相同的前景色,如下所示:

<Style TargetType="TextBlock" x:Key="Coloring">
<Style.Resources>
<Style TargetType="Hyperlink">
<Setter Property="Foreground" Value="{Binding Foreground,RelativeSource={RelativeSource FindAncestor,AncestorType=TextBlock}}"/>
</Style>
</Style.Resources>
<Setter Property="Foreground" Value="Orange"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=.}" Value="A">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=.}" Value="B">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=.}" Value="C">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>

在这个例子中,我添加了一个 setter 来设置默认前景橙色,仅用于测试目的。

关于wpf - 使用单一样式同时设置 Hyperlink 和 TextBlock 的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2247987/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com