ConditionBehavior
这是一个非常特殊的行为,虽然行为都被放在 <i:Interaction.Behaviors>
中,但一般的行为会直接添加到控件上,而这个行为是放在触发器中的,与其他动作在一起。
它起作用的方式与触发器本身的原理有关。当触发器被触发时,如果它内部有多个动作,那么这些动作会依次执行。如果有一个抛出异常,则后面的动作不会执行。ConditionBehavior
在这里就扮演了一个特殊的“动作”,它允许你在触发器中任意一个位置添加一个条件。如果条件不成立,则后面的动作不会执行。
比如我们给一个按钮添加了一个 Click
触发器,并且希望在触发时能够有额外的条件判断,那么可以这样实现:
这里有几个值得注意的点:
- 条件放在一个
i:ConditionBehavior
内部的i:ConditionalExpression
里,看起来嵌套了好几层 i:ConditionalExpression
的ForwardChaining
属性决定了条件的连接方式,And
表示与,Or
表示或(默认是与);同时这也意味着,这里可以写多个条件i:ComparisonCondition
是一个条件,它的LeftOperand
和RightOperand
是用来比较的左值和右值,而Operator
属性决定了它们之间的关系(默认为Equal
,其他还有GreaterThan
、LessThan
、GreaterThanOrEqual
、LessThanOrEqual
、NotEqual
等)ComparisonCondition
是行为库提供的唯一一个条件,其他的条件需要自己实现