2013-03-17 110 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