2013-03-17 112 views
0
<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。

代码背后的代码是什么?

回答

1

你可以在后面的代码由静态方法Canvas.GetLeftCanvas.GetTopCanvas.SetLeftCanvas.SetTop设置Canvas.LeftCanvas.Top附加属性:

double left = Canvas.GetLeft(obj) + 20; 
double top = Canvas.GetTop(obj) + 20; 
Canvas.SetLeft(obj, left); 
Canvas.SetTop(obj, top); 

看来这个问题是关于如何获得或处理键盘输入。您必须附加(例如)KeyDown处理程序,但您必须知道UIElement需要具有键盘焦点才能接收关键事件。既不矩形也不画布是可聚焦(见Focus Overview),你可以将处理器连接到您的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 
    } 
} 
+0

我知道这一点,但方法名称应该是什么? 我试图私人无效LayoutRoot_KeyDown(对象发件人,KeyEventArgs E) { 如果(e.Key == Key.Right) { 双左= Canvas.GetLeft(OBJ)+ 20; double top = Canvas.GetTop(obj)+ 20; Canvas.SetLeft(obj,left); Canvas.SetTop(obj,top); }} 和 私人无效c1_KeyDown(对象发件人,发送KeyEventArgs E) { 如果(e.Key == Key.Right) { }} 如何 – LynAs 2013-03-17 20:37:25

+0

将我可能知道?你没有告诉你的问题。无论如何,看我的编辑。 – Clemens 2013-03-17 21:12:33

+0

抱歉误会。谢谢。 – LynAs 2013-03-17 23:13:06