WPF 自定义属性和触发器
2015-07-07 16:01
344 查看
public class MEFACheckBox : CheckBox { //public enum CheckBoxSatus //{ // [Description("无")] // None=-1, // [Description("错")] // error=0, // [Description("对")] // correct=1, //} public MEFACheckBox() { base.DefaultStyleKey = typeof(MEFACheckBox); base.IsThreeState = false; this.Click += MEFACheckBox_Click; CheckValue = "None"; } public string CheckValue { get { return (string)GetValue(CheckValueProperty); } set { SetValue(CheckValueProperty, value); } } public static readonly DependencyProperty CheckValueProperty = DependencyProperty.Register("CheckValue", typeof(string), typeof(MEFACheckBox), <span style="color:#ff6666;">new UIPropertyMetadata("")</span>);
//这句话很重要不然触发器没用。 static MEFACheckBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(MEFACheckBox), new FrameworkPropertyMetadata(typeof(MEFACheckBox))); } private void MEFACheckBox_Click(object sender, RoutedEventArgs e) { switch (CheckValue) { //空--对 case "None": CheckValue = "correct"; break; //错--空 case "error": CheckValue = "None"; break; //对--错 case "correct": CheckValue = "error"; break; default: break; } } }
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:l="clr-namespace:MEFA.Controls"> <Style x:Key="MyButton1" TargetType="{x:Type CheckBox}"> <!--<Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="CheckBox"> <DockPanel> <ContentPresenter DockPanel.Dock="Left" VerticalAlignment="Center" /> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="40"/> </Grid.ColumnDefinitions> <Rectangle Grid.Column="0" Grid.ColumnSpan="1" /> <TextBlock x:Name="txtBox" /> </Grid> </DockPanel> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="txtBox" Property="Grid.Column" Value="0"/> <Setter TargetName="txtBox" Property="Text" Value=" ( √ ) "/> </Trigger> <Trigger Property="IsChecked" Value="{x:Null}"> <Setter TargetName="txtBox" Property="Grid.Column" Value="0"/> </Trigger> <Trigger Property="IsChecked" Value="false"> <Setter TargetName="txtBox" Property="Grid.Column" Value="0"/> <Setter TargetName="txtBox" Property="Text" Value=" ( ) "/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter>--> </Style> <Style TargetType="{x:Type l:MEFACheckBox}" BasedOn="{StaticResource MyButton1}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type l:MEFACheckBox}"> <DockPanel x:Name="ss"> <ContentPresenter DockPanel.Dock="Left" VerticalAlignment="Center" /> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="15"/> <ColumnDefinition Width="10"/> <ColumnDefinition Width="8"/> </Grid.ColumnDefinitions> <TextBlock x:Name="txtBoxl" Text=" ( " Grid.Column="0" Grid.ColumnSpan="1"/> <Rectangle Grid.Column="1" Grid.ColumnSpan="1" /> <TextBlock x:Name="txtBox" Width="10" /> <TextBlock x:Name="txtBoxr" Text=")" Grid.Column="2" Grid.ColumnSpan="1" /> </Grid> </DockPanel> <ControlTemplate.Triggers> <!--<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=CheckValue}" Value="1"> <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/> <Setter TargetName="txtBox" Property="Text" Value=" "/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=CheckValue}" Value="-1"> <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/> <Setter TargetName="txtBox" Property="Text" Value="×"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=CheckValue}" Value="0"> <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/> <Setter TargetName="txtBox" Property="Text" Value="√"/> </DataTrigger> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Foreground" Value="Red"/> </Trigger> <Trigger Property="IsFocused" Value="True"> <Setter Property="Foreground" Value="Red"/> </Trigger>--> <Trigger Property="CheckValue" Value="None"> <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/> <Setter TargetName="txtBox" Property="Text" Value=" "/> </Trigger> <Trigger Property="CheckValue" Value="correct"> <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/> <Setter TargetName="txtBox" Property="Text" Value="√"/> </Trigger> <Trigger Property="CheckValue" Value="error"> <Setter TargetName="txtBox" Property="Grid.Column" Value="1"/> <Setter TargetName="txtBox" Property="Text" Value="×"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary>
相关文章推荐
- [深入学习C#]C#实现多线程的方式:Task——任务
- MySQL查看和修改表的存储引擎
- Java——集合工具类和jdk1.5有关集合的新特性
- GRE写作必备句型
- SQL Server 跨服务器 不同数据库之间复制表的数据的方法!
- cas-server异常不会后台显示而是变成json显示在页面。
- php类的定义与继承用法实例
- 自定义“菊花dialog”
- Guide to understanding XSS – XSS payloads, attack vectors, BeEF hooking, MiTM with Shank and some hi
- AIX Study之--AIX用户资源访问限制配置
- 不用浏览器,直接用代码发送文件给webservices所在服务器 并且可以周期行的发送
- AsyncTask的使用
- leetcode - Reverse Words in a String
- leetcode - Reverse Words in a String
- 硬件电路之电感,磁珠,零欧姆电阻的应用
- LeetCode89:Gray Code
- HTML5学习笔记-1.网页入门
- MSP430F149学习之路——按键与LED
- android studio 中出现"...ProjectScript\buildscript\cache.properties.lock"
- LeetCode-Implement Queue using Stacks-解题报告