WPF中的Behavior及Behavior在MVVM模式下的应用( 二 )


官方内置了以下几种,可以根据需要使用 。
Style中的和控件中的

WPF中的Behavior及Behavior在MVVM模式下的应用

文章插图
Style中的各种参见WPF的Style
继承自类中控件也可以直接使用
>
可以看出无论是Style中的还是控件下面的,都是使用的属性来设置事件,但是有些事件是不属于的,比如的选择某个条目事件 。而且这两种都是对故事板进行操作 。
MVVM模式来实现获得鼠标的坐标
当鼠标在窗口上移动时,将坐标信息传到VM中,并在V中显示 。那有人会问,这样还不如直接不经过VM直接在V中进行显示,关键在于,某些时候VM中需要坐标信息,而且要遵循MVVM模式 。
自定义
class PositionBehavior : Behavior{//设置两个依赖属性public double X{get { return (double)GetValue(XProperty); }set { SetValue(XProperty, value); }}public static readonly DependencyProperty XProperty =DependencyProperty.Register("X", typeof(double), typeof(PositionBehavior), new FrameworkPropertyMetadata(0.0,FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));public double Y{get { return (double)GetValue(YProperty); }set { SetValue(YProperty, value); }}public static readonly DependencyProperty YProperty =DependencyProperty.Register("Y", typeof(double), typeof(PositionBehavior), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));protected override void OnAttached(){AssociatedObject.MouseMove += AssociatedObject_MouseMove;}private void AssociatedObject_MouseMove(object sender, MouseEventArgs e){var pos = e.GetPosition(this.AssociatedObject);X = pos.X;Y = pos.Y;}protected override void OnDetaching(){AssociatedObject.MouseMove -= AssociatedObject_MouseMove;}}
VM
class ViewModel1 : INotifyPropertyChanged{private double x;private double y;public double X{get { return x; }set{x = value;PropertyChanged.Invoke(this, new PropertyChangedEventArgs("X"));PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Position"));}}public double Y{get { return y; }set{y = value;PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Y"));PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Position"));}}public string Position{get { return $"坐标为:{X:F2},{Y:F2}"; }}public event PropertyChangedEventHandler? PropertyChanged;}
View