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时触发。这个暂时还没怎么玩过,等下次用到再说=-=

  • 相关阅读:
    VS2013中使用本地IIS+域名调试ASP.NET项目
    layui框架中layer父子页面交互的方法分析
    Layer组件多个iframe弹出层打开与关闭及参数传递
    Android新版本特性以及注意事项
    【Android Studio安装部署系列】三十、从Android studio2.2.2升级到Android studio3.0之路
    【Android Studio安装部署系列】二十八、Android Studio查看其它APP的布局结构
    【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名
    Beetle简单构建TCP服务
    【Android Studio安装部署系列】十三、Android studio添加和删除Module 2
    LeetCode242——Valid Anagram
  • 原文地址:https://www.cnblogs.com/socialdk/p/2865641.html
Copyright © 2011-2022 走看看