WPF 引用外部样式文件

假设一个应用程序中,某个窗口需要使用样式,但是样式非常多,写在一个窗口中代码分类不方便。最好Style写在专门的xaml文件中,然后引用到窗口中,就像HTML引用外部css文件一样。 实现方法: 1.创建新建项添加/资源字典Style.xaml,并添加Style样式 Code: ResourceDictionaryxmlns= http://schemas.microsoft.com/winfx/20
  

  假设一个应用程序中,某个窗口需要使用样式,但是样式非常多,写在一个窗口中代码分类不方便。最好Style写在专门的xaml文件中,然后引用到窗口中,就像HTML引用外部css文件一样。

  实现方法:

  1.创建新建项“添加/资源字典”Style.xaml,并添加Style样式

  Code:

< ResourceDictionary xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
                    xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml">   
    < Style x:Key= "BaseStyle"  TargetType= "{x:Type Control}">   
        < Setter Property= "Margin"  Value= "5"  />   
    < /Style>   
    < Style TargetType= "{x:Type Button}"  BasedOn= "{StaticResource BaseStyle}">   
        < Setter Property= "Width"  Value= "80"  />   
        < Setter Property= "Height"  Value= "27"  />   
    < /Style>   
    < Style TargetType= "{x:Type GroupBox}"  BasedOn= "{StaticResource BaseStyle}">   
   
    < /Style>   
    < Style TargetType= "{x:Type TextBox}"  BasedOn= "{StaticResource BaseStyle}">   
   
    < /Style>   
    < Style TargetType= "{x:Type CheckBox}"  BasedOn= "{StaticResource BaseStyle}">   
   
    < /Style>   
    < Style TargetType= "{x:Type ListBox}"  BasedOn= "{StaticResource BaseStyle}">   
   
    < /Style>   
    < Style TargetType= "{x:Type ProgressBar}"  BasedOn= "{StaticResource BaseStyle}">   
   
    < /Style>   
    < Style TargetType= "{x:Type TextBlock}"  >   
        < Setter Property= "Margin"  Value= "5"  />   
    < /Style>   
< /ResourceDictionary>  

 

  2.在窗口中引用外部资源,注意:在Window中添加外部样式需要指定key,而Application中则不需要,所以这里rdStyle就是引用外部样式Style.xaml的key

  Code:

< Window x:Class= "MSSQLDocCreator.MainWindow"    
        xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml"    
        xmlns:local=
"clr-namespace:MSSQLDocCreator"    
        Title=
"MainWindow"  Height= "602"  Width= "425"  WindowStartupLocation= "CenterScreen">   
    < Window.Resources>   
        < ResourceDictionary x:Key= "rdStyle">   
            < ResourceDictionary.MergedDictionaries>   
                < ResourceDictionary Source= "Style.xaml"  />   
            < /ResourceDictionary.MergedDictionaries>   
        < /ResourceDictionary>   
    < /Window.Resources>   
    ....    
< /Window>   

 

  3.将样式应用到窗口的布局上

  Code:

< Window x:Class= "MSSQLDocCreator.MainWindow"    
        xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml"    
        xmlns:local=
"clr-namespace:MSSQLDocCreator"    
        Title=
"MainWindow"  Height= "602"  Width= "425"  WindowStartupLocation= "CenterScreen">    
    < Window.Resources>    
    ...    
    < /Window.Resources>    
    < Grid Resources= "{StaticResource rdStyle}">    
    ...    
    < /Grid>    
< /Window>   

 

  见效果图:

  

 

  完整MainWindow.xaml

  Code:

< Window x:Class= "MSSQLDocCreator.MainWindow"    
        xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x=
"http://schemas.microsoft.com/winfx/2006/xaml"    
        xmlns:local=
"clr-namespace:MSSQLDocCreator"    
        Title=
"MainWindow"  Height= "602"  Width= "425"  
WindowStartupLocation=
"CenterScreen">   
    < Window.Resources>   
        < ObjectDataProvider x:Key= "bndOutputFeilds"  
ObjectType=
"{x:Type local:AppHelper}"  MethodName= "GetDocFields"  />   
        < ResourceDictionary x:Key= "rdStyle">   
            < ResourceDictionary.MergedDictionaries>   
                < ResourceDictionary Source= "Style.xaml"  />   
            < /ResourceDictionary.MergedDictionaries>   
        < /ResourceDictionary>   
    < /Window.Resources>   
    < Grid Resources= "{StaticResource rdStyle}">   
        < Grid.RowDefinitions>   
            < RowDefinition Height= "Auto"  />   
            < RowDefinition />   
            < RowDefinition Height= "Auto"  />   
            < RowDefinition Height= "Auto"  />   
        < /Grid.RowDefinitions>   
        < GroupBox Grid.Row= "0"  Header= "MSSQL ConnectionString">   
            < StackPanel Orientation= "Vertical">   
                < TextBox Name= "txtConnectionString"    
                         VerticalScrollBarVisibility=
"Visible"  
TextWrapping=
"Wrap"  Height= "58"  />   
                < StackPanel Orientation= "Horizontal">   
                    < Button Name= "txtTestConnect"  Content= "Test"  />   
                    < Button Name= "txtConnect"  Content= "Connect"  />   
                < /StackPanel>   
            < /StackPanel>   
        < /GroupBox>   
        < GroupBox Grid.Row= "1"  Header= "Output options">   
            < Grid>   
                < Grid.RowDefinitions>   
                    < RowDefinition Height= "Auto"  />   
                    < RowDefinition />   
                    < RowDefinition Height= "Auto"  />   
                < /Grid.RowDefinitions>   
                < Grid.ColumnDefinitions>   
                    < ColumnDefinition />   
                    < ColumnDefinition />   
                < /Grid.ColumnDefinitions>   
                < TextBlock Grid.Row= "0"  Grid.Column= "0"  Text= "Tables and Views"  />   
                < TextBlock Grid.Row= "0"  Grid.Column= "1"  Text= "Output fields"  />   
                < ListBox Grid.Row= "1"  Grid.Column= "0"  />   
                < ListBox Name= "lstFields"  Grid.Row= "1"  Grid.Column= "1"      
                         DataContext=
"{StaticResource bndOutputFeilds}"    
                         ItemsSource=
"{Binding}"  IsSynchronizedWithCurrentItem= "True">   
                    < ListBox.ItemTemplate>   
                        < DataTemplate>   
                            < StackPanel Orientation= "Horizontal"  >   
                                < CheckBox IsChecked= "{Binding Path=IsSelected}"  
Click=
"chkSomeFiels_Click"  />   
                                < TextBlock Text= "{Binding Path=FieldName}"   
VerticalAlignment=
"Center" />   
                            < /StackPanel>   
                        < /DataTemplate>   
                    < /ListBox.ItemTemplate>   
                < /ListBox>   
                < CheckBox Name= "chkObjectsAll"  IsThreeState= "True"  
Grid.Row=
"2"  Grid.Column= "0"  Content= "Select All"  />   
                < CheckBox Name= "chkFieldsAll"  IsThreeState= "True"  
Grid.Row=
"2"  Grid.Column= "1"  Content= "Select All"  IsChecked= "True"  
Click=
"CheckBox_Click"  />   
            < /Grid>   
        < /GroupBox>   
        < ProgressBar Height= "20"   Grid.Row= "2"  />   
        < StackPanel  Grid.Row= "3"  HorizontalAlignment= "Left">   
            < Button Content= "Create"  />   
        < /StackPanel>   
    < /Grid>   
< /Window>   

  Code:

using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Text;    
using System.Windows;    
using System.Windows.Controls;    
using System.Windows.Data;    
using System.Windows.Documents;    
using System.Windows.Input;    
using System.Windows.Media;    
using System.Windows.Media.Imaging;    
using System.Windows.Navigation;    
using System.Windows.Shapes;    
using System.ComponentModel;    
   
namespace MSSQLDocCreator {    
     /// <summary>    
     /// MainWindow.xaml 的交互逻辑    
     /// </summary>    
     public partial  class MainWindow : Window {    
         public MainWindow() {    
            InitializeComponent();    
        }    
   
         /// <summary>    
         /// Field全选    
         /// </summary>    
         private  void CheckBox_Click( object sender, RoutedEventArgs e) {    
            ObjectDataProvider provider = (ObjectDataProvider) this.FindResource( "bndOutputFeilds");    
            List<DocField> fields = provider.Data  as List<DocField>;    
             foreach (DocField field  in fields) {    
                field.IsSelected = ((CheckBox)sender).IsChecked.Value;    
            }    
        }    
   
         private  void chkSomeFiels_Click( object sender, RoutedEventArgs e) {    
            CheckSelectedFields();    
        }    
   
         private  void CheckSelectedFields() {    
            ObjectDataProvider provider = (ObjectDataProvider) this.FindResource( "bndOutputFeilds");    
            List<DocField> fields = provider.Data  as List<DocField>;    
             int checkedCount = fields.Where(c => c.IsSelected).Count();    
             if (checkedCount == 0) {    
                chkFieldsAll.IsChecked =  false;    
            }  else  if (checkedCount == fields.Count) {    
                chkFieldsAll.IsChecked =  true;    
            }  else {    
                chkFieldsAll.IsChecked =  null;    
            }    
        }    
   
    }    
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值