在silverlight画布中移动对象
本文关键字:移动 对象 布中 silverlight | 更新日期: 2023-09-27 18:04:28
<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。
这背后的代码是什么?
您可以在静态方法Canvas后面的代码中获取和设置Canvas.Left
和Canvas.Top
附加属性。GetLeft,画布。GetTop,画布。SetLeft和Canvas。置顶:
double left = Canvas.GetLeft(obj) + 20;
double top = Canvas.GetTop(obj) + 20;
Canvas.SetLeft(obj, left);
Canvas.SetTop(obj, top);
问题似乎是关于如何接收或处理键盘输入。您必须附加(例如)KeyDown处理程序,但是您必须知道,为了接收键事件,UIElement需要具有键盘焦点。由于矩形和画布都不可聚焦(参见焦点概述),您可以将处理程序附加到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
}
}