在触发器中,您可以测试另一个属性的值吗?

时间:2016-05-16 04:22:02

标签: c# wpf triggers conditional-statements

是否可以将触发器的value属性基于元素的属性?

例如,在ControlTemplate的{​​{1}}中,我试图将其ScrollBar属性设置为Visibility,如果其Collapsed和{ {1}}属性相等。

但是,以下操作无效,因为您无法将Minimum设置为Maximum的{​​{1}},因为Binding不是Value }}

Trigger

那么这可以完全用触发器来完成,还是我必须在代码隐藏中执行此操作?

1 个答案:

答案 0 :(得分:1)

在此方案中,Id建议您创建自定义行为

喜欢这个

public class MinMaxVisibilityBehavior : Behavior<ScrollBar>
{
    public override void OnAttached()
    {
        DependencyPropertyDescriptor
                .FromProperty(ScrollBar.MaximumProperty, typeof(ScrollBar))
                .AddValueChanged(AssociatedObject, CheckMinMax);
        DependencyPropertyDescriptor
                .FromProperty(ScrollBar.MinimumProperty, typeof(ScrollBar))
                .AddValueChanged(AssociatedObject, CheckMinMax);
    }

    private void CheckMinMax(object sender, EventArgs e)
    {
       AssociatedObject.Visibility = AssociatedObject.Minimum == 
          AssociatedObject.Maximum ? Visibility.Hidden : Visibility.Visible;
    }
}

然后在你的XAML中

<ScrollBar>
 ........
   <i:Interaction.Behaviors>
      <local:MinMaxVisibilityBehavior />
   </i:Interaction.Behaviors>
</ScrollBar>