WPF依赖项属性动态键按下

时间:2018-12-06 02:37:14

标签: c# wpf data-binding dependency-properties

我不知道我的头衔是否正确。

但是我在这里正在做的是创建一个在画布上绘制矩形的程序。

到目前为止,当我按下键盘上的SHIFT键时,可以通过触发依赖项属性在画布上绘画。但我希望它变得充满活力。我创建了另一个依赖项属性,然后在我的XAML上可以传递KEY

我的XAML上是这样的

DrawingTrigger="Ctrl+Shift"

到目前为止,这是我的课程

class WindowHelper : Behavior<Window>
    {


        public bool IsDrawing
        {
            get { return (bool)GetValue(IsDrawingProperty); }
            set { SetValue(IsDrawingProperty, value); }
        }

        // Using a DependencyProperty as the backing store for IsDrawing.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty IsDrawingProperty =
            DependencyProperty.Register("IsDrawing", typeof(bool), typeof(WindowHelper),
                new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null));

        protected override void OnAttached()
        {
            AssociatedObject.KeyDown += AssociatedObject_KeyDown;
            AssociatedObject.KeyUp += AssociatedObject_KeyUp;

            base.OnAttached();
        }

        private void AssociatedObject_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
                IsDrawing = false;
        }

        private void AssociatedObject_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
                IsDrawing = true;


        }

        protected override void OnDetaching()
        {
            AssociatedObject.KeyDown -= AssociatedObject_KeyDown;
            AssociatedObject.KeyUp -= AssociatedObject_KeyUp;
            base.OnDetaching();
        }


    }

搜索后,我发现了一个代码,该代码可以打印按下的键盘修饰符

            Console.WriteLine(Keyboard.Modifiers);

使用键盘修饰符。当我按下Ctrl + Shift + Alt

它给了我

Alt, Control, Shift

有了这个,我该如何使用它来解决我的问题?

检查是否发现DrawingTrigger中的每个单词是将IsDrawing设置为True或任何建议中的一种好习惯。

1 个答案:

答案 0 :(得分:0)

键和修饰符是两个不同的东西。我只是在Window.InputBindings上添加/删除KeyBinding对象。它将为您处理99%的工作。它已经支持将修饰符与+结合使用,并处理左右键等。您只需将Ctrl + Shift定义到Modifer中,然后为其提供ICommand即可回调。容易豆豆。