复杂的UI效果(缩放、拖拽、平滑等)通过样式与触发器比较难以实现,通过引入行为模型来实现。使用行为也可以处理UI操作之外的业务
程序集引用 System.Windows.Interactivity.dll (基础) Microsoft.Expression.Interactions.dll (扩展)
继承behavior
重载 OnAttached() 和 OnDetaching()方法 ,AssociatedObject 属性对应放置行为的元素,在OnAttach()中关联事件处理器,通过事件处理器来实现业务,OnDetaching() 中做事件移除操作
自定义行为
public class MyBehavior : Behavior<Button>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.Click += AssociatedObject_Click;
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.Click -= AssociatedObject_Click;
}
private void AssociatedObject_Click(object sender, RoutedEventArgs e)
{
if (sender is Button btn)
{
DoubleAnimation doubleAnimation = new DoubleAnimation();
doubleAnimation.Duration = new TimeSpan(100);
doubleAnimation.To = 100;
btn.BeginAnimation(Button.WidthProperty, doubleAnimation);
}
}
}
<!-- 命名空间
xmlns: i="clr-namespace=System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:mybehavior="clr-namespace:---"
-->
<i:interaction.Behavior>
<mybehavior:MyBehavoir/>
</i:interaction.Behavior>
行为基用法
<!--xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"-->
<i:Interaction.Triggers>
<i:EventTrigger EventName="IsMouseOver">
<i:InvokeCommandAction Command="{Binding MouseOverCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
手机扫一扫
移动阅读更方便
你可能感兴趣的文章