gpt4 book ai didi

c# - WPF ControlTemplate 从父资源继承样式

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:11 27 4
gpt4 key购买 nike

我正在对出现在带有“FooterPanel”样式的边框内的超链接进行样式设置,如下所示:

<Style x:Key="FooterPanel" TargetType="{x:Type Border}">
<Style.Resources>
<Style TargetType="{x:Type Hyperlink}">
<Setter Property="Foreground" Value="{StaticResource FooterPanelLinkBrush}"/>
</Style>
</Style.Resources>
</Style>

我现在还创建了一个样式来将按钮创建为超链接(这样我就可以在超链接上获取 IsDefault 和 IsCancel 等属性):

<Style x:Key="LinkButton" TargetType="{x:Type Button}">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<Hyperlink Command="{TemplateBinding Command}" CommandParameter="{TemplateBinding CommandParameter}">
<Run Text="{TemplateBinding Content}"/>
</Hyperlink>
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

FooterPanel 中的普通超链接接收 FooterPanelLinkBrush 前景,但如果我在 FooterPanel 中使用 LinkBut​​ton,则不会应用该样式。有没有办法让 ControlTemplate 继承 FooterPanel 中的样式而不是任何全局超链接样式?

编辑:

根据这个答案https://stackoverflow.com/a/9166963/2383681有特殊处理,这意味着 Hyperlink 不会接收 FooterPanel 中定义的样式,因为它不是从 Control 派生的。

我不确定如果没有一些代码隐藏,我正在尝试做的事情是可能的,所以我想我只是要解决这个问题并为 FooterPanelLinkBut​​ton 创建一个新的样式和为页脚面板中的按钮明确引用它。如果不这样做,知道这是否可能会很有趣。

最佳答案

您可以为 HyperLink 创建一个单独的 Style:

<Style x:Key="FooterPanelLink" TargetType="{x:Type Hyperlink}">
<Setter Property="Foreground" Value="{StaticResource FooterPanelLinkBrush}"/>
</Style>

然后在 FooterPanelLinkBut​​ton 样式的 Resources 中使用此 Style,方法如下:

<Style x:Key="FooterPanel" TargetType="{x:Type Border}">
<Style.Resources>
<Style TargetType="Hyperlink" BasedOn="{StaticResource FooterPanelLink}" />
</Style.Resources>
</Style>

<Style x:Key="LinkButton" TargetType="{x:Type Button}">
<Style.Resources>
<Style TargetType="Hyperlink" BasedOn="{StaticResource FooterPanelLink}" />
</Style.Resources>

<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<Hyperlink Command="{TemplateBinding Command}" CommandParameter="{TemplateBinding CommandParameter}">
<Run Text="{TemplateBinding Content}"/>
</Hyperlink>
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

这样,LinkBut​​ton 中的 HyperLink 将使用您在 FooterPanelLink 样式中指定的颜色。

关于c# - WPF ControlTemplate 从父资源继承样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35850614/

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