2010-10-04 54 views
13

我有silverlight問題我用了兩天的時間來戰鬥:帶有樣式的模板控制一個按鈕。在具體的按鈕中,我有一個帶有路徑作爲內容的畫布。問題是我希望路徑填充顏色從模板中的ContentControl綁定到Foreground。從風格的ContentControl綁定到一個前景屬性的路徑中的填充屬性

但是,我一直無法弄清楚如何構建綁定到Forground。如果我願意,例如使用TextBlock,它會自動從樣式中獲取Forground顏色。正如預期的那樣,文本具有前景色。綁定的原因是動畫控制了forground,我希望它傳播到路徑的填充顏色。有任何想法嗎?

模板包含以下內容:

<Style x:Key="PathButtonStyle" TargetType="Button"> 

... Animations and state stuff 

    <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" > 
    <ContentControl x:Name="ContentContainer" 
     ContentTemplate="{TemplateBinding ContentTemplate}" 
     Content="{TemplateBinding Content}" 
     Foreground="{TemplateBinding Foreground}" /> 
    </Border> 
</Style> 

打倒在我的佈局我有以下幾點:

<Button x:Name="Play" Style="{StaticResource PathButtonStyle}" > 
    <Canvas x:Name="PlayIcon"> 
    <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
      Fill="{PATH TO CONTENTCONTROLS FOREGROUND}" /> 
    </Canvas> 
</Button> 

我cleand了代碼,並取出東西,使其更具可讀性,但我希望你能明白它背後的想法。

回答

9

既然你出了名的,以您的按鈕,你可以使用綁定ElementName參數:

<Button x:Name="Play" Style="{StaticResource PathButtonStyle}" > 
    <Canvas x:Name="PlayIcon"> 
     <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
      Fill="{Binding Foreground, ElementName=Play}" /> 
    </Canvas> 
</Button> 
+3

我對前景動畫沒有幫助。我保持尋找解決方案。 – 2012-10-28 12:35:19

1

實際上,不是將Canvas設置爲Button中的內容,而是可以將其放入Templete中。

 <Style x:Key="PathButtonStyle" TargetType="Button"> 

    ... Animations and state stuff 
    <Canvas x:Name="PlayIcon"> 
    <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
      Fill="{TemplateBinding Foreground}" /> 
    </Canvas> 
     <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" > 
     <ContentControl x:Name="ContentContainer" 
      ContentTemplate="{TemplateBinding ContentTemplate}" 
      Content="{TemplateBinding Content}" 
      Foreground="{TemplateBinding Foreground}" /> 
     </Border> 
    </Style> 

如果您使用這種情況,您可以做任何事情。

+5

這個答案是沒有意義的,路徑__is__是內容,如果只需要一條路徑,爲什麼還要打開一個模板。這個想法是能夠將各種不同的路徑放入樣式化的按鈕中。 – AnthonyWJones 2011-03-25 13:20:04

+0

我將Canvas移動到模板上,因爲我可以綁定到ContentContainer。據我所知,沒有其他方法可以做到。事實上,即使需要一個路徑,也可以打開模板(因爲您可以需要修改一些模板...)儘管上面的答案是解決當前問題的方法。 – Sonosar 2011-03-26 09:27:06

0

綁定到ContentControl中應該幫助(Silverlight的5):

<Button x:Name="Play" Style="{StaticResource PathButtonStyle}" > 
    <Canvas x:Name="PlayIcon"> 
     <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
       Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType=ContentControl}}" /> 
    </Canvas> 
</Button> 
相關問題