Dot-Net

將路徑中的填充屬性綁定到樣式中 ContentControl 中的 Foreground 屬性

  • March 23, 2015

我用了兩天來解決silverlight問題:帶有樣式的模板控制按鈕。在具體按鈕中,我有一個以路徑為內容的畫布。問題是我希望路徑填充顏色從模板中的 ContentControl 綁定到前景。

但是,我無法弄清楚如何構造綁定以到達前台。例如,如果我想使用 TextBlock,它將自動從 Style 中獲取 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>

我已經清理了程式碼並刪除了一些東西以使其更具可讀性,但我希望你能理解它背後的想法。

由於您為按鈕命名,因此可以使用 BindingElementName參數:

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

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

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

如果你會使用這個場景,你可以做任何你想做的事情。

引用自:https://stackoverflow.com/questions/3856724