美文网首页
Behavior的使用

Behavior的使用

作者: 雪之梦_8f14 | 来源:发表于2019-06-28 13:36 被阅读0次

Behavior

  • Behavior将某些特定的功能从某个特定的控件中解耦出来,重用性高

利用behavior实现以下功能

  • 点击某个控件 正常产生某个控件的事件
  • 点击某个控件并移动鼠标, 拖动整个窗口
  • 效果图如下


    dragwindow.gif
  • 源码
  • 相关连接

代码

  • 定义一个类 继承抽象类 Behavior<T>(包含在System.Windows.Interactivity.dll中)
  • 重写两个方法 OnAttached 和 OnDetaching 获取一个宿主控件对象AssociatedObject
  • 以下是behavior的代码
public class WinDragMoveBehavior: Behavior<Window>
    {
        #region Fields

        private Point _downPoint;

        #endregion Fields

        #region Properties

        public Window AttachedWindow { get; set; }

        #endregion Properties

        #region Methods

        protected override void OnAttached()
        {
            base.OnAttached();
            AttachedWindow = AssociatedObject as Window;

            if (AttachedWindow == null)
            {
                return;
            }

            RegisterEvents();
        }

        protected override void OnDetaching()
        {
            base.OnDetaching();

            UnRegisterEvents();
        }

        /// <summary>
        ///  注册事件
        /// </summary>
        private void RegisterEvents()
        {
            if (AttachedWindow != null)
            {
                AttachedWindow.PreviewMouseLeftButtonDown += AttachedGrid_PreviewMouseLeftButtonDown;
                AttachedWindow.PreviewMouseMove += AttachedGridOnPreviewMouseMove;
                AttachedWindow.PreviewMouseLeftButtonUp += AttachedGridOnPreviewMouseLeftButtonUp;
            }
        }

        /// <summary>
        /// 注销事件
        /// </summary>
        private void UnRegisterEvents()
        {
            if (AttachedWindow != null)
            {
                AttachedWindow.MouseLeftButtonDown -= AttachedGrid_PreviewMouseLeftButtonDown;
                AttachedWindow.MouseMove -= AttachedGridOnPreviewMouseMove;
                AttachedWindow.MouseLeftButtonUp -= AttachedGridOnPreviewMouseLeftButtonUp;
            }
        }

        #endregion Methods

        #region EventHandlers

        private void AttachedGrid_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            _downPoint = e.GetPosition(AttachedWindow);
        }

        private void AttachedGridOnPreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                var mouseMovePoint = e.GetPosition(AttachedWindow);

                if (AppUtils.IsAbleToDrag(mouseMovePoint, _downPoint))
                {
                    AttachedWindow.DragMove();
                }
            }
        }

        private void AttachedGridOnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            var mouseMovePoint = e.GetPosition(AttachedWindow);

            if (AppUtils.IsAbleToDrag(mouseMovePoint, _downPoint))
            {
                e.Handled = true;

                var element = Mouse.Captured;
                element?.ReleaseMouseCapture();
            }
        }

        #endregion EventHandlers
    }
  • 使用此behavior
 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
 xmlns:behavior="clr-namespace:DragAndClickWinSamples.Behaviors"
<i:Interaction.Behaviors>
        <behavior:WinDragMoveBehavior></behavior:WinDragMoveBehavior>
</i:Interaction.Behaviors>

相关文章

  • 深入理解CoordinatorLayout.Behavior

    要研究的几个问题 一、Behavior是什么?为什么要用Behavior?二、怎么使用Behavior?三、从源码...

  • Behavior使用

    一、CoordinatorLayout CoordinatorLayout的主要功能是协调内部各个子控件直接的状态...

  • Behavior的使用

    Behavior Behavior将某些特定的功能从某个特定的控件中解耦出来,重用性高 利用behavior实现以...

  • Android开源库

    UI 之自定义 Behavior 实现 AppBarLayout 越界弹性效果 使用自定义 Behavior 实现...

  • MVP

    UI 之自定义 Behavior 实现 AppBarLayout 越界弹性效果 使用自定义 Behavior 实现...

  • Behavior的简单使用

    实现效果图 实现步骤 1.布局文件 2.填充数据 关键点 使用了系统自带的Behavior 参考文章 Androi...

  • behavior使用记录二

    自定义behavior的使用 本次实现的效果:点击红色图片,绿色的跟随移动 xml代码: behavior的代码:...

  • CoordinatorLayout 与 Behavior

    CoordinatorLayout 与 Behavior CoordinatorLayout 的使用 先看官网对 ...

  • behavior使用记录一

    记录初次使用behavior中遇到的问题。(文中加粗的都是个人认为容易犯错的地方,关于behavior和coord...

  • Material Design之CoordinatorLayou

    引言 CoordinatorLayout的使用核心就是Beahvior,使用Behavior来实现直接子控件之间的...

网友评论

      本文标题:Behavior的使用

      本文链接:https://www.haomeiwen.com/subject/bdpscctx.html