将控制用方向键一个帆布内 [英] Move a control inside a Canvas using directional keys

查看:170
本文介绍了将控制用方向键一个帆布内的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些控制一个Canvas元素里,我希望能够用箭头/方向键移动至画布内(上,下,左,右)。什么是做到这一点的WPF / code-背后的最简单的方法?是否有这样做的一个惯用的WPF的方式?

I have a number of controls inside a Canvas element and I want to be able to move them inside the Canvas using the arrow/directional keys (up, down, left, right). What's the easiest way to do this in WPF/code-behind? Is there an idiomatic WPF way of doing this?

我想我应该澄清:我希望能够独立移动每个控制;我不想在同一时间将所有的控件。

I guess I should clarify: I want to be able to move each control independently; I do not want to move all of the controls at the same time.

推荐答案

下面是我的解决办法:

首先,拍摄键按下事件

EventManager.RegisterClassHandler(typeof(MainWindow), UIElement.KeyDownEvent, new KeyEventHandler(KeyDownHandler));

然后找出谁发送的事件,并相应地移动。

Then figure out who sent the event and move it accordingly.

void KeyDownHandler(object sender, KeyEventArgs e)
{
    UIElement element = e.OriginalSource as UIElement;
    if (element != null)
    {
        double left = Canvas.GetLeft(element);
        if (Double.IsNaN(left)) left = 0;
        double top = Canvas.GetTop(element);
        if (Double.IsNaN(top)) top = 0;

        switch (e.Key)
        {
            case Key.Left: left--; break;
            case Key.Right: left++; break;
            case Key.Up: top--; break;
            case Key.Down: top++; break;
        }

         Canvas.SetLeft(element, left);
         Canvas.SetTop(element, top);
    }
    e.Handled = true;
}

这篇关于将控制用方向键一个帆布内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆