WPF行为基础

理解行为

复杂的UI效果(缩放、拖拽、平滑等)通过样式与触发器比较难以实现,通过引入行为模型来实现。使用行为也可以处理UI操作之外的业务

程序集引用 System.Windows.Interactivity.dll (基础) Microsoft.Expression.Interactions.dll (扩展)

自定义行为继承

继承behavior<UIElement> 或 behavior<FrameworkElement>

自定义行为实现

重载 OnAttached()OnDetaching()方法 ,AssociatedObject 属性对应放置行为的元素,在OnAttach()中关联事件处理器,通过事件处理器来实现业务,OnDetaching() 中做事件移除操作

命空间应用以及xaml代码

自定义行为

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>
posted @ 2022-04-23 21:10  蓝白永恒  阅读(133)  评论(0编辑  收藏  举报