2016-03-07 51 views
2

我的造型超鏈接如下:WPF控件模板繼承風格從境內出現與風格「一個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的。

我不確定我想要做什麼,因此可能沒有一些代碼隱藏,所以我想我只是要解決這個問題,併爲FooterPanelLinkButton創建一個新的樣式,並明確引用這個按鈕在頁腳面板中。知道這是否可能,但不這樣做會很有趣。

+0

您可以使用[BasedOn](https://msdn.microsoft.com/en-us/library/system.windows.style.basedon(v = vs.110).aspx),但這會讓每個LinkBut​​ton都有footerpanel風格不只是在footerpanel內 –

回答

1

您可以創建爲HyperLink單獨Style

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

然後在下面的方式FooterPanelLinkButton風格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> 

這樣, LinkButton中的HyperLink將使用您在FooterPanelLink樣式中分配的顏色。

+0

這改變了'LinkBut​​ton'內的'超鏈接'始終是'FooterPanelLink' - 我希望有一種方法我可以說它應該使用全局樣式,除非它在一個內部'FooterPanel',然後它應該使用'FooterPanelLink'。 – Will