将控制用方向键一个帆布内 [英] Move a control inside a Canvas using directional keys
本文介绍了将控制用方向键一个帆布内的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些控制一个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屋!
查看全文