最近在看wpf相关东西,虽然有过两年的wpf方面的开发经验,可是当时开发的时候,许多东西只知其一;不知其二,至今都是模模糊糊,框架基本是别人搭建,本身也就照着模板写写,如今许多东西慢慢的理解了,回顾之前的若干记忆,而后解决本身不懂的方面,在CSDN作记录,写下一些本身的理解,方便之后查阅:app
今天写的是关于wpf的资源字典里面作触发器,而后主界面进行调用:框架
1: 首先创建了个wpf窗体程序WpfApplication1;工程里面自动生成App.xaml和MainWindow.xaml两个文件,这两个文件就不作介绍了,App.xaml会在下面用到。orm
2:而后呢。通常都会将控件的触发器写成这样:xml
<Button Name="btnUpdate" Grid.Row="1" Width="100" Height="30" Content="更 新" Command="{Binding CmdCommand}" CommandParameter="{Binding Oberve}">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="Button.IsMouseOver" Value="True">
<Setter Property="Button.Foreground" Value="Blue"/>
</Trigger>
<Trigger Property="Button.IsPressed" Value="True">
<Setter Property="Button.Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>ip
那么控件多的时候,就显得臃肿了,因而就想到了【资源字典】,在资源字典里面写这些,而后调用,新建了【Dictionary1.xaml】文件资源
将要是实现的式样写进它里面:开发
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="CircleButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Border.BorderThickness" Value="1,1,1,1" />
<Setter Property="Border.CornerRadius" Value="3" />
<Setter Property="Height" Value="36" />
<Setter Property="Width" Value="36" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Fill="{TemplateBinding Background}"/>
<Ellipse>
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Offset="0" Color="#00000000"/>
<GradientStop Offset="0.88" Color="#00000000"/>
<GradientStop Offset="1" Color="#80000000"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Ellipse Margin="10" x:Name="highlightCircle" >
<Ellipse.Fill >
<LinearGradientBrush >
<GradientStop Offset="0" Color="#50FFFFFF"/>
<GradientStop Offset="0.5" Color="#00FFFFFF"/>
<GradientStop Offset="1" Color="#50FFFFFF"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter x:Name="content" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="10"></RotateTransform>
</Setter.Value>
</Setter>
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"></Setter>
<Setter Property="Background" Value="#FF0CC030" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>get
3:这下就用到App.xaml发挥做用了;App这个文件是协助运行主窗口的文件,在app文件里面将数据资源里面的东东引进:io
<Application x:Class="WpfApplication1.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="Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>form
4:这样后,MainWindow.xaml文件中就能够引进数据字典里面的式样和触发器了;
<Grid>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="157,119,0,0" Name="button1"
Style="{StaticResource CircleButtonStyle}"//引进数据字典里面的式样
VerticalAlignment="Top" Width="75" />
</Grid>
生成以下效果: