WPF 中,如何使用自定义的resources
第一步,先自己自定义一个Resources
1.新建一个xaml文件,在其中自定义好自己的Resources
这个Resource 的根节点是
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"></ResourceDictionary>
然后在根节点中写入自己要定义的样式,
注意,在对应特定控件的样式中,要写入 TargetType 对应于要设置样式的控件,如:
TargetType="{x:Type Button}",并且对样式写上x:key= 以便查找:
入下面一个例子:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <GradientStopCollection x:Key="MyGlassGradientStopsResource">   
        <GradientStop Color="WhiteSmoke" Offset="0.2" />    
        <GradientStop Color="Transparent" Offset="0.4" />    
        <GradientStop Color="WhiteSmoke" Offset="0.5" />    
        <GradientStop Color="Transparent" Offset="0.75" />    
        <GradientStop Color="WhiteSmoke" Offset="0.9" />    
        <GradientStop Color="Transparent" Offset="1" />    
    </GradientStopCollection>    
    <LinearGradientBrush x:Key="MyGlassBrushResource"     
   StartPoint="0,0" EndPoint="1,1" Opacity="0.75"     
   GradientStops="{StaticResource MyGlassGradientStopsResource}" />    
    <!-- Styles and other resources below here. -->
    <LinearGradientBrush x:Key="GrayBlueGradientBrush"    
    StartPoint="0,0" EndPoint="1,1">    
        <GradientStop Color="YellowGreen" Offset="0" />    
        <GradientStop Color="#CCCCFF" Offset="0.5" />    
        <GradientStop Color="YellowGreen" Offset="1" />    
    </LinearGradientBrush>
    <Style x:Key="GlassButton" TargetType="{x:Type Button}">       
        <Setter Property="Background"     
      Value="{StaticResource GrayBlueGradientBrush}" />    
        <Setter Property="Width" Value="80" />    
        <Setter Property="Margin" Value="10" />    
        <Setter Property="Template">    
            <Setter.Value>    
                <ControlTemplate TargetType="{x:Type Button}">    
                    <Grid Width="{TemplateBinding Width}"     
      Height="{TemplateBinding Height}" ClipToBounds="True">
                        <!-- Outer Rectangle with rounded corners. -->   
                        <Rectangle x:Name="outerRectangle" HorizontalAlignment="Stretch"     
      VerticalAlignment="Stretch" Stroke="{TemplateBinding Background}"     
      RadiusX="20" RadiusY="20" StrokeThickness="5" Fill="Transparent" />
                        <!-- Inner Rectangle with rounded corners. -->   
                        <Rectangle x:Name="innerRectangle" HorizontalAlignment="Stretch"     
        VerticalAlignment="Stretch" Stroke="Transparent"     
        StrokeThickness="20"     
        Fill="{TemplateBinding Background}" RadiusX="20" RadiusY="20"     
      />
                        <!-- Glass Rectangle -->   
                        <Rectangle x:Name="glassCube" HorizontalAlignment="Stretch"    
        VerticalAlignment="Stretch"    
        StrokeThickness="2" RadiusX="10" RadiusY="10" Opacity="0"    
        Fill="{StaticResource MyGlassBrushResource}"    
        RenderTransformOrigin="0.5,0.5">    
                            <Rectangle.Stroke>    
                                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">    
                                    <LinearGradientBrush.GradientStops>    
                                        <GradientStop Offset="0.0" Color="LightBlue" />    
                                        <GradientStop Offset="1.0" Color="Gray" />    
                                    </LinearGradientBrush.GradientStops>    
                                </LinearGradientBrush>    
                            </Rectangle.Stroke>
                            <!-- These transforms have no effect as they    
             are declared here.     
             The reason the transforms are included is to be targets     
             for animation (see later). -->    
                            <Rectangle.RenderTransform>    
                                <TransformGroup>    
                                    <ScaleTransform />    
                                    <RotateTransform />    
                                </TransformGroup>    
                            </Rectangle.RenderTransform>
                            <!-- A BevelBitmapEffect is applied to give the button a    
               "Beveled" look. -->    
                            <Rectangle.BitmapEffect>    
                                <BevelBitmapEffect />    
                            </Rectangle.BitmapEffect>    
                        </Rectangle>
                        <!-- Present Text of the button. -->   
                        <DockPanel Name="myContentPresenterDockPanel">    
                            <ContentPresenter x:Name="myContentPresenter" Margin="20"     
          Content="{TemplateBinding  Content}" TextBlock.Foreground="Black" />    
                        </DockPanel>    
                    </Grid>
                    <ControlTemplate.Triggers>   
                        <!-- Set properties when mouse pointer is over the button. -->    
                        <Trigger Property="IsMouseOver" Value="True">
                            <!-- Below are three property settings that occur when the    
         condition is met (user mouses over button).  -->    
                            <!-- Change the color of the outer rectangle when user          mouses over it. -->    
                            <Setter Property ="Rectangle.Stroke" TargetName="outerRectangle"    
      Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
                            <!-- Sets the glass opacity to 1, therefore, the          glass "appears" when user mouses over it. -->   
                            <Setter Property="Rectangle.Opacity" Value="1"       TargetName="glassCube" />
                            <!-- Makes the text slightly blurry as though you were          looking at it through blurry glass. -->   
                            <Setter Property="ContentPresenter.BitmapEffect"       TargetName="myContentPresenter">    
                                <Setter.Value>    
                                    <BlurBitmapEffect Radius="1" />    
                                </Setter.Value>    
                            </Setter>    
                        </Trigger>    
                        <!-- Set properties when button has focus. -->    
                        <Trigger Property="IsFocused" Value="true">    
                            <Setter Property="Rectangle.Opacity" Value="1"       TargetName="glassCube" />    
                            <Setter Property="Rectangle.Stroke" TargetName="outerRectangle"    
      Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />    
                            <Setter Property="Rectangle.Opacity" Value="1" TargetName="glassCube" />    
                        </Trigger>
                        <!-- Animations that start when mouse enters and leaves button. -->    
                        <EventTrigger RoutedEvent="Mouse.MouseEnter">    
                            <EventTrigger.Actions>    
                                <BeginStoryboard Name="mouseEnterBeginStoryboard">    
                                    <Storyboard>
                                        <!-- This animation makes the glass rectangle shrink in the X direction. -->   
                                        <DoubleAnimation Storyboard.TargetName="glassCube"     
          Storyboard.TargetProperty=    
          "(Rectangle.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"    
          By="-0.1" Duration="0:0:0.5" />
                                        <!-- This animation makes the glass rectangle shrink in the Y direction. -->   
                                        <DoubleAnimation    
        Storyboard.TargetName="glassCube"     
          Storyboard.TargetProperty=    
          "(Rectangle.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"     
          By="-0.1" Duration="0:0:0.5" />    
                                    </Storyboard>    
                                </BeginStoryboard>    
                            </EventTrigger.Actions>    
                        </EventTrigger>    
                        <EventTrigger RoutedEvent="Mouse.MouseLeave">    
                            <EventTrigger.Actions>
                                <!-- Stopping the storyboard sets all animated properties back to default. -->   
                                <StopStoryboard BeginStoryboardName="mouseEnterBeginStoryboard" />    
                            </EventTrigger.Actions>    
                        </EventTrigger>
                        <!-- Animation fires when button is clicked, causing glass to spin.  -->    
                        <EventTrigger RoutedEvent="Button.Click">    
                            <EventTrigger.Actions>    
                                <BeginStoryboard>    
                                    <Storyboard>    
                                        <DoubleAnimation Storyboard.TargetName="glassCube"     
          Storyboard.TargetProperty=    
          "(Rectangle.RenderTransform).(TransformGroup.Children)[1].(RotateTransform.Angle)"     
          By="360" Duration="0:0:0.5" />    
                                    </Storyboard>    
                                </BeginStoryboard>    
                            </EventTrigger.Actions>    
                        </EventTrigger>    
                    </ControlTemplate.Triggers>    
                </ControlTemplate>    
            </Setter.Value>    
        </Setter>
    </Style>   
</ResourceDictionary>
第二步:在项目的配置文件 App.xaml 中配置 自定义Resources
在 App.xml根节点下面建立一个 <Application.Resources>,其中定义ResourceDictionary节点
在其中配置自己定义的Resources,例如:
<Application x:Class="PaperOfficerPro.App"   
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml">    
    <Application.Resources>    
        <ResourceDictionary>    
            <ResourceDictionary.MergedDictionaries>    
                <ResourceDictionary  Source="Resource/ButtonResource.xaml"></ResourceDictionary>    
                <ResourceDictionary  Source="Resource/ExpanderStyleResource.xaml"></ResourceDictionary>    
                <ResourceDictionary  Source="Resource/GlassButtonStyle.xaml"></ResourceDictionary>    
                <ResourceDictionary  Source="Resource/DataGridResource.xaml"></ResourceDictionary>    
            </ResourceDictionary.MergedDictionaries>    
        </ResourceDictionary>    
    </Application.Resources>    
</Application>
第三步,页面引用Resource中自定义的样式:
在页面的需要引用样式的控件的样式属性上引用样式
如需要在Button属性中引用第一步中定义的TargetType="{x:Type Button}" 的样式,那么就引用这个样式的x:key中的值。
例如:
<Button x:Name="LoginSubmit" Style="{DynamicResource GlassButton}" Width="Auto" Margin="117,271,148,20" Content="确定登陆" Click="LoginSubmit_Click" FontSize="14" Grid.RowSpan="2" >    
        </Button>
WPF 中,如何使用自定义的resources的更多相关文章
- WPF中使用WindowChrome自定义窗口中遇到的最大化问题
		
FrameWork 4.5 之后,内置了WindowChrome类,官方文档: https://msdn.microsoft.com/en-us/library/system.windows.shel ...
 - WPF中ToolTip的自定义
		
ToolTip或者PopUp这个控件在做界面时会经常用到.如何对ToolTip进行自定义呢? 1.首先自定义tooltip的controlTemplate,完全清除系统默认效果, 如下: ...
 - 在WPF中自定义你的绘制(一)
		
原文:在WPF中自定义你的绘制(一) 在WPF中自定义你的绘制(一) ...
 - WPF中自定义MarkupExtension
		
在介绍这一篇文章之前,我们首先来回顾一下WPF中的一些基础的概念,首先当然是XAML了,XAML全称是Extensible Application Markup Language (可扩展应用程序标记 ...
 - WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探
		
原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探 最近因为项目需要,开始学习如何使用WPF开发桌面程序.使用WPF一段时间之后,感 ...
 - WPF中实现自定义虚拟容器(实现VirtualizingPanel)
		
WPF中实现自定义虚拟容器(实现VirtualizingPanel) 在WPF应用程序开发过程中,大数据量的数据展现通常都要考虑性能问题.有下面一种常见的情况:原始数据源数据量很大,但是某一时刻数据容 ...
 - WPF中Image控件绑定到自定义类属性
		
首先我们定义一个Student类,有ID,Name,Photo(保存图片路径). using System; using System.Collections.Generic; using Syste ...
 - 在WPF中自定义你的绘制(五)
		
原文:在WPF中自定义你的绘制(五) 在WPF中自定义你的绘制(五) ...
 - 在WPF中自定义你的绘制(三)
		
原文:在WPF中自定义你的绘制(三) 在WPF中自定义你的绘制(三) ...
 
随机推荐
- 背景透明文字不透明的最佳方法兼容IE(以背景黑色透明度0.5为例)
			
以背景黑色,透明度0.5举例为大家详细介绍下关于背景透明,文字不透明的最佳方法同时兼容IE,具体实现如下,感兴趣的朋友可以参考下哈希望对大家有所帮助 以背景黑色,透明度0.5举例 非IE:backgr ...
 - mysql之一
			
MySQL or MariaDB 简介 DBMS:数据库管理系统 RDBMS:关系型数据库管理系统 总之:他们都是一个数据管理程序:大多都是CS架构,都有专门的通信协议进行数据交换 关系模型: ...
 - eclipse反编译插件
			
eclipse翻译的插件很多,jadclipse 是其中一款.设置很简单. ①.下载net.sf.jadclipse_3.3.0.jar 官方网站:http://sourceforge.net/pro ...
 - UART与USART的差别
			
UART与USART都是单片机上的串口通信,他们之间的差别例如以下: 首先从名字上看: UART:universal asynchronous receiver and transmitter通用异步 ...
 - hdu 5445 Food Problem 多重背包
			
Food Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...
 - [Effective C++ --009]确定对象被使用前已先被初始化
			
在确保对象在使用前已先被初始化这一条款的编码实践中,作者为我们总结了三条经验,它们分别是: ------------------------------------------------------ ...
 - linux cpio 备份命令
			
cpio 命令 [root@linux ~]# cpio -covB > [file|device] <==备份[root@linux ~]# cpio -icduv < [fi ...
 - Vi、Vim及Gedit编辑器
			
搜索(注意,不需要输入:号.也可以先输入:号再键入命令) /string……………………向后搜索,从光标处向文件尾搜索,按n键继续搜索下一个 ?string……………………向前搜索 注意:搜索时会将所 ...
 - php面试常用算法
			
这些都是真实的IT公司招聘PHP程序员的面试题,这些都是简单的基本算法.包括:冒泡算法.快速排序算法.二分查找算法.顺序算法. 冒泡排序,对象可以是一个数组 01 function bubble_so ...
 - [转]How to: Execute Oracle Stored Procedures Returning RefCursors
			
本文转自:http://www.telerik.com/help/openaccess-orm/openaccess-tasks-oracle-execute-sp-result-set.html I ...