我是C#和编程的新手,所以这看起来很简单,但我很难找到帮助。
我正在尝试在Visual Studio 2012中的对象上实现WASD控件(特别是椭圆)我理解如何操作对象 - 我的问题是收集用户输入。
似乎在过去,人们使用System.Windows.Forms
,但我不确定它是否已经存在(它说有一个丢失的令牌,当我去添加引用时,它说所有都添加了)。
我尝试向网格添加一个按键事件,但它永远不会触发。我无法将焦点设置为网格,因为它位于System.Windows.Forms
。
所以我的问题:有关如何实施WASD控件的任何提示?或者更具体地说,当用户按下某个键而不手动将焦点添加到对象时,如何注册?
答案 0 :(得分:2)
既然你说VS2012,C#但是Elipse
而没有System.Windows.Forms
我会冒险猜测你真的做过File - >新项目 - > WPF应用程序(因为它有一个关闭的椭圆控件(原始))。
由于Elipse
无法获得焦点,因此您需要确定按键何时感兴趣,为此添加处理程序到Window。这是一些示例XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
<Grid>
<Ellipse x:Name="elipsy" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="100" Canvas.Left="241" Canvas.Top="119"/>
</Grid>
</Window>
在您的处理程序(Window_KeyDown
)中,您可以执行以下操作:
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.W)
{
Canvas.SetTop(elipsy, Canvas.GetTop(elipsy) - 1);
}
else if (e.Key == Key.A)
{
Canvas.SetLeft(elipsy, Canvas.GetLeft(elipsy) - 1);
}
else if (e.Key == Key.S)
{
Canvas.SetTop(elipsy, Canvas.GetTop(elipsy) + 1);
}
else if (e.Key == Key.D)
{
Canvas.SetLeft(elipsy, Canvas.GetLeft(elipsy) + 1);
}
}
这应该让你开始走上正轨。如果你真的想要WinForms给我们一个叫喊声,我们应该能够在那里找到类似的解决方案。