WPF——如何爲項目設置全局樣式。

    在項目中,須要爲全部的Button、TextBox設置一個默認的全局樣式,一個個的爲多個控件設置相同的樣式顯然是不明智的。在WPF中能夠經過資源設置全局樣式,主要有倆種方法:app

1.第一種就是先寫好按鈕的樣式,不寫Key,而後在App.xaml中引用。ide

<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,控制不夠靈活,因此再介紹下第二種方法。spa

2.code

爲控件寫的樣式和上文差很少,只是加上Key。(沒有Key爲全局樣式,有Key則須要進行鍵值引用)xml

 <Style x:Key="DefaultCheckBox" TargetType="{x:Type CheckBox}" />

新建一個資源,統一管理全部的控件樣式資源。經過BaseOn繼承帶Key的樣式,轉換爲默認全局樣式,而後只須要在App中引用這一個資源文件便可。這樣即便須要寫幾十上百個樣式,APP中也只須要一行代碼。blog

  <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中,相同控件的樣式,在最下面的引用優先級更高。資源

相關文章
相關標籤/搜索