Dot-Net
將路徑中的填充屬性綁定到樣式中 ContentControl 中的 Foreground 屬性
我用了兩天來解決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>我已經清理了程式碼並刪除了一些東西以使其更具可讀性,但我希望你能理解它背後的想法。
由於您為按鈕命名,因此可以使用 Binding
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>
實際上,您可以將其放在 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>如果你會使用這個場景,你可以做任何你想做的事情。