zoukankan      html  css  js  c++  java
  • Trigger和DataTrigger简单应用

      在WPF中,Sytle是一个非常重要的东西,它是一种对属性值的处理,其中Trigger(触发器)则是在属性值的处理中加上条件。

      WPF定义了五种Trigger来作为触发条件,分别是:Trigger,DataTrigger,MultiTrigger,MultiDataTrigger,EventTrigger。

      下面最简单的一个Trigger是这样写的:  

    View Code
    <Style TargetType="Button" x:Key="buttonStyle">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Width" Value="100" />
                        <Setter Property="Height" Value="50" />
                    </Trigger>
                </Style.Triggers>
            </Style>

    在条件设置中,只要鼠标移动到Button上面时,就可以引动到触发器,然后设置它的长宽,当鼠标移开时候,触发器就会失效,然后就会变到原来的值。这个触发器以控件的属性作为触发条件。

      还有时会用到DataTrigger,这个一般以控件DataContext的属性作为触发条件。当某个数据值是想要的值时,就可以设置相应的样式。

      有时候也可以先设置一个依赖属性,然后根据不同的条件来设置不同的属性值,再通过DataTrigger来设置也是可以的,下面有一个例子来运用一下DataTrigger:

    View Code
     <TextBox x:Name="textBox" Width="100" Height="50"  Margin="10" Background="{Binding RelativeSource={RelativeSource self},Path=Text, 
                    UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBox_TextChanged_1">
                    <TextBox.Resources>
                        <Style TargetType="TextBox">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=LabelBackground}" Value="red">
                                    <Setter Property="Background" Value="Red" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Resources>
                </TextBox>
    View Code
    private void TextBox_TextChanged_1(object sender, TextChangedEventArgs e) {
                if (textBox.Text.ToLower() == "red") {
                    LabelBackground = "red";
                }
            }
    
            public string LabelBackground {
                get { return (string)GetValue(LabelBackgroundProperty); }
                set { SetValue(LabelBackgroundProperty, value); }
            }
            public static readonly DependencyProperty LabelBackgroundProperty =
                DependencyProperty.Register("LabelBackground", typeof(string), typeof(MainWindow), new PropertyMetadata(null));

    好吧~其实上面也只是硬要用一下而已~纯属娱乐。。。当然在很多时候用这个也是很方便的!

      MultiTrigger,MultiDataTrigger这两个和上面差不多,只是多属性触发罢了。

      EventTrigger是以RoutedEvent作为触发条件,当指定的路由事件Raise时触发。这个暂时还没怎么玩过,等下次用到再说=-=

  • 相关阅读:
    sql中的并、交、差
    白水的sql需求:每个病人的对应最小诊断类别|partition|
    |转|oracle行转列点评oracle11g sql新功能pivot/unpivot
    oracle wm_concat(column)函数的使用不同公司支付同一客商(行转列)|转|
    记录那些删除的伴我成长的触发器
    PL/SQL Developer使用技巧|F=Forwarding|
    手工创建数据库 ocp课程 wait for
    Oracle数据库监听配置|转|
    最新解决的sql:病人相邻两次看病小于3天
    tns的一些常见错误分析实例 |转|
  • 原文地址:https://www.cnblogs.com/socialdk/p/2865641.html
Copyright © 2011-2022 走看看