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是行为库提供的唯一一个条件,其他的条件需要自己实现