<UserControl x:Class="MyGameSilverlight.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" KeyDown="OnKeyDown">
<Grid x:Name="LayoutRoot" Background="White">
<Canvas x:Name="c1" Background="Green" Margin="0,0,130,80" RenderTransformOrigin="0.463,0.5">
<Rectangle x:Name="obj" Height="60" Width="80" Canvas.Left="45" Canvas.Top="45" Fill="Aqua" />
</Canvas>
</Grid>
</UserControl>
[代码背后]
private void OnKeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Right:
Canvas.SetLeft(obj, Canvas.GetLeft(obj) + 20);
break;
case Key.Left:
Canvas.SetLeft(obj, Canvas.GetLeft(obj) - 20);
break;
// more here
}
}
我在画布中有简单矩形的代码。现在我想在按键上移动这个矩形。 例如,当我按下右箭头键时,矩形应从其初始位置向右移动20px。
代码背后的代码是什么?
答案 0 :(得分:1)
您可以通过静态方法Canvas.GetLeft,Canvas.GetTop,Canvas.SetLeft和{{3来获取和设置代码背后的Canvas.Left
和Canvas.Top
附加属性}}:
double left = Canvas.GetLeft(obj) + 20;
double top = Canvas.GetTop(obj) + 20;
Canvas.SetLeft(obj, left);
Canvas.SetTop(obj, top);
似乎问题是关于如何接收或处理键盘输入。您必须附加(例如)KeyDown处理程序,但您必须知道UIElement需要具有键盘焦点才能接收键事件。由于Rectangle和Canvas都不可聚焦(请参阅Canvas.SetTop),您可以将处理程序附加到MainPage:
<UserControl ... KeyDown="OnKeyDown">
<Canvas>
<Rectangle Name="obj" .../>
</Canvas>
</UserControl>
在处理程序中,您可以像这样处理各个键:
private void OnKeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Right:
Canvas.SetLeft(obj, Canvas.GetLeft(obj) + 20);
break;
// more here
}
}