2010-06-11 110 views
1

我真的很喜歡WPF,因爲它通過改變resourcedictionaries的動態皮膚支持,但趕上,風格必須由設計師在XAML。我的客戶需要一個可換膚的用戶界面,最終用戶可以自己製作皮膚。我的問題是 -是否可以製作可自定義的WPF樣式?

在Photoshop中,您可以拍攝任何圖像,並添加顏色疊加層以將所有顏色更改爲該色調。你可以在WPF中做類似的事情嗎?我只是一個初學者,看着幾個WPF樣式,似乎所有的顏色值都是硬編碼的。

下面是一個示例場景 - 用戶從顏色選擇器中選擇兩種顏色,並且所有控件都具有從Color1到Color2的漸變背景。

編輯:可以將顏色保存到XML文件並再次加載?

回答

1

關鍵是要認識到,一個樣式可以包含DynamicResource或綁定,因此,如果你的風格是:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{DynamicResource UserSelectedBackground}" /> 
    ... 
</Style> 

任何你設置爲「UserSelectedBackground」資源將被應用到所有按鈕。

或者你可以綁定到視圖模型對象:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{Binding ButtonBackground, Source={x:Static my:SkinModel.Instance}" /> 
    ... 
</Style> 

現在,每當ButtonBackground在SkinModel情況的變化,所有按鈕的背景將自動更新。 (這假定你的SkinModel使用DependencyProperties或實現INotifyPropertyChanged。)

爲了讓用戶分別控制漸變填充的兩端,可以在SkinModel中創建兩個由顏色拾取器從雙向綁定的SolidColorBrush屬性。只要這些屬性發生更改,請重新計算ButtonBackground屬性(在DependencyProperty的PropertyChangedCallback中或在CLR屬性的setter中)。

將狀態保存到文件中很簡單:只需使用XamlWriter將您的SkinModel序列化爲XAML,然後將其寫入文件即可。稍後加載它,只需使用XamlReader.Parse即可。

0

您可以將顏色值存儲在XML/DataBase(sqllite可能很適合)中,並將它們放入控件將綁定到的類中。這樣,您可以使用ColorPicker爲用戶更改這些數據。

相關問題