最近在看wpf相关东西,虽然有过两年的wpf方面的开发经验,但是当时开发的时候,许多东西一知半解,至今都是模模糊糊,框架基本是别人搭建,自己也就照着模板写写,现在许多东西慢慢的理解了,回顾以前的若干记忆,然后解决自己不懂的方面,在CSDN做记录,写下一些自己的理解,方便以后查阅:
今天写的是关于wpf的资源字典里面做触发器,然后主界面进行调用:
1: 首先建立了个wpf窗体程序WpfApplication1;工程里面自动生成App.xaml和MainWindow.xaml两个文件,这两个文件就不做介绍了,App.xaml会在下面用到。
2:然后呢。一般都会将控件的触发器写成这样:
<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>那么控件多的时候,就显得臃肿了,于是就想到了【资源字典】,在资源字典里面写这些,然后调用,新建了【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>3:这下就用到App.xaml发挥作用了;App这个文件是协助运行主窗口的文件,在app文件里面将数据资源里面的东东引进:
<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>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>生成如下效果: