2009-11-02 170 views
0

我在WPF以下樣式繪製和顏色的盒子,裏面是用在ResourceDictionary中定義的各種PART_Name項目自定義控件:WPF更改樣式的筆刷顏色

<ResourceDictionary> 
. 
. 
. 
<Brush x:Key="BoxStroke">#FFD69436</Brush> 
    <LinearGradientBrush x:Key="BoxBrush" StartPoint="0,0" EndPoint="0,1"> 
    <LinearGradientBrush.GradientStops> 
     <GradientStop Color="#FAFBE9" Offset="0" /> 
     <GradientStop Color="Green" Offset="1" /> 
    </LinearGradientBrush.GradientStops> 
    </LinearGradientBrush> 

<Style x:Key="BoxStyle" TargetType="Path"> 
    <Setter Property="Fill" Value="{DynamicResource BoxBrush}"/> 
    <Setter Property="Stroke" Value="{DynamicResource BoxStroke}"/> 
</Style> 

<Style x:Key="Box" TargetType="Path" BasedOn="{StaticResource BoxStyle}"> 
    <Setter Property="Data" Value="M 0,0 H 60 V40 H 0 Z"/> 
</Style> 
. 
. 
. 
</ResourceDictionary> 

我的問題是如何訪問刷子的GradientStop顏色屬性?

例如,如果用戶點擊該框,將其從「綠色」變爲「藍色」。

我已經有了處理用戶交互的所有適當的代碼,我只是難住如何改變畫筆的顏色。

回答

2

最簡單的方法是使用數據綁定來代替。將視圖綁定到具有包含要更改的顏色值的屬性的對象。然後將該屬性值綁定到漸變。點擊按鈕後,修改該屬性,數據綁定機制將爲您更新屏幕上的顏色。只要確保你實現INotifyPropertyChanged或使屬性成爲依賴屬性。

祝你好運!

0

一旦你可以在代碼中訪問畫筆,你只需要給它分配一個顏色值。例如,System.Windows.Media.ColorConverter課程會將十六進制/網頁顏色轉換爲System.Windows.Media.Color值。

下面是一個示例,希望這是你問什麼的總體思路:

System.Windows.Media.LinearGradientBrush gb = new System.Windows.Media.LinearGradientBrush(); 
gb.GradientStops[0].Color = (Color)ColorConverter.ConvertFromString("#FF00FF00");