WPF ControlTemplate从父资源继承样式

时间:2016-03-07 17:57:05

标签: c# wpf xaml

我使用样式" 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派生的{1}}。

我不确定我想要做什么,因此没有一些代码隐藏,所以我想我只是要解决这个问题并为{{1创建一种新风格并为页脚面板中的按钮显式引用它。如果没有这样做,那么知道这是否可能会很有趣。

1 个答案:

答案 0 :(得分:1)

您可以为Style创建单独的HyperLink

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

然后按以下方式在StyleResources样式的FooterPanel中使用此LinkButton

<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>

这样HyperLink内的LinkButton将使用您在FooterPanelLink样式中指定的颜色。