zoukankan      html  css  js  c++  java
  • WPF引用外部样式

     假设一个应用程序中,某个窗口需要使用样式,但是样式非常多,写在一个窗口中代码分类不方便。最好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;    
                }    
            }    
       
        }    
    }    

    本文来自qing2005的博客,原文地址:http://blog.csdn.net/qing2005/archive/2011/04/22/6522395.aspx

     

  • 相关阅读:
    【初学EXT】布局练习
    创建型模式总结(补充UML类图)
    数据库基本概念总结
    Word2010操作技巧总结
    VMWare虚拟机磁盘压缩和上网总结
    第一次用word2010发布文章到博客园记
    设计模式学习总结一原则及创建型模式
    为什么要开始写blog?
    Delphi异常处理总结
    设计模式总结之行为型模式
  • 原文地址:https://www.cnblogs.com/zhihai/p/2444285.html
Copyright © 2011-2022 走看看