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

  • 相关阅读:
    Restful
    RESTful
    UUID使用
    Security注解:@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全
    java Spring定时器 每个季度执行一次
    给文字加小手样式
    java 根据年月获取当前年月的最后一天,获取当前年月有多少天
    mui Picker DtPicker 固定内容以及变动内容Picker 不同情况下的应用 提高效率
    java封装返回结果应用 利用反射机制 返回结果以及错误信息
    java 封装返回结果实体类 返回结果以及错误信息
  • 原文地址:https://www.cnblogs.com/socialdk/p/2865641.html
Copyright © 2011-2022 走看看