Свойство зависимости Wpf Динамическая клавиша Вниз - PullRequest
0 голосов
/ 06 декабря 2018

Я не знаю, правильный ли у меня заголовок.

Но я здесь делаю то, что создаю Программу, которая рисует прямоугольник на холсте.

На данный момент я могу рисовать на холсте, вызывая свойство зависимости, когда нажимаю клавишу SHIFT на клавиатуре.Но я хочу, чтобы это стало динамичным.Я создаю еще одно свойство зависимости, затем в моем XAML я могу передать ключ

как-то так в моем 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 голосов
/ 06 декабря 2018

Ключ и модификаторы - это две разные вещи.Я бы просто добавил / удалил объект KeyBinding в Window.InputBindings.Это будет обрабатывать 99% вашей работы за вас.Он уже поддерживает комбинирование модификаторов с + и обработку левой и правой клавиш и т. Д. Вы просто определяете передачу Ctrl + Shift в модификаторы, например, и даете ему ICommand для обратного вызова.Лёгкий пази.

...