在項目中,需要為所有的Button、TextBox設置一個預設的全局樣式,一個個的為多個控制項設置相同的樣式顯然是不明智的。在WPF中可以通過資源設置全局樣式,主要有倆種方法: 1.第一種就是先寫好按鈕的樣式,不寫Key,然後在App.xaml中引用。 <ResourceDictionary xmln ...
在項目中,需要為所有的Button、TextBox設置一個預設的全局樣式,一個個的為多個控制項設置相同的樣式顯然是不明智的。在WPF中可以通過資源設置全局樣式,主要有倆種方法:
1.第一種就是先寫好按鈕的樣式,不寫Key,然後在App.xaml中引用。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Style TargetType="{x:Type CheckBox}" /> </ResourceDictionary>
<!-- 預設Button樣式 --> <ResourceDictionary Source="pack://application:,,,/Resources/ButtonStyle/BasicButton.xaml" /> <!-- 預設TextBox樣式 --> <ResourceDictionary Source="pack://application:,,,/Resources/TextBoxStyleBasic/TextBoxStyleBasic.xaml" /> <!-- 預設CheckBox樣式 --> <ResourceDictionary Source="pack://application:,,,/Resources/ButtonStyle/BasicCheckbox.xaml" /> <!-- 預設滾動條樣式 -->
<ResourceDictionary Source="pack://application:,,,/Resources/ControlStyle/ScrollViewBasic.xaml" />
這種方式有多少個控制項就需要在APP中累砌多少個引用,會使配置文件雜亂冗餘,而且由於預設樣式沒有Key,控制不夠靈活,所以再介紹下第二種方法。
2.
為控制項寫的樣式和上文差不多,只是加上Key。(沒有Key為全局樣式,有Key則需要進行鍵值引用)
<Style x:Key="DefaultCheckBox" TargetType="{x:Type CheckBox}" />
新建一個資源,統一管理所有的控制項樣式資源。通過BaseOn繼承帶Key的樣式,轉換為預設全局樣式,然後只需要在App中引用這一個資源文件即可。這樣即使需要寫幾十上百個樣式,APP中也只需要一行代碼。
<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/Resources/ButtonStyle/BasicButton.xaml" /> <ResourceDictionary Source="pack://application:,,,/Resources/ButtonStyle/BasicCheckbox.xaml" /> <ResourceDictionary Source="pack://application:,,,/Resources/ControlStyle/ScrollViewBasic.xaml" /> <ResourceDictionary Source="pack://application:,,,/Resources/TextBoxStyleBasic/TextBoxStyleBasic.xaml" /> </ResourceDictionary.MergedDictionaries> <Style BasedOn="{StaticResource DefaultButton}" TargetType="Button" /> <Style BasedOn="{StaticResource DefaultCheckBox}" TargetType="CheckBox" /> <Style BasedOn="{StaticResource DefaultScrollViewer}" TargetType="ScrollViewer" /> <Style BasedOn="{StaticResource DefaultTextBox}" TargetType="TextBox" /> </ResourceDictionary>
App中:
<ResourceDictionary Source="pack://application:,,,/Resources/OverwrideDefaultControlStyles.xaml" />
總結:如果只需要設置一倆個控制項的全局樣式,第一個即可,設置多個控制項樣式的話,還是建議第二種。另外:在APP.xaml中,相同控制項的樣式,在最下麵的引用優先順序更高。