2012-06-11 34 views
2

我想在按 - >时移动画布。 我设置事件KeyDown,这是事件移动画布上的按键

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key==Key.Right) 
    { 

    } 
} 

方法,但写什么里面ifCanvas.setLeft不起作用

<Canvas x:Name="totle" KeyDown="Window_KeyDown"> 
     <Ellipse Name="yio" Canvas.Left="40" Canvas.Top="40" Height="30" Width="30" Fill="Beige"/> 
     <Line X1="40" Canvas.Left="67" Canvas.Top="51" StrokeThickness="40" Stroke="Red" Height="10" Width="45" Fill="#FFD86464" OpacityMask="Red" /> 
     <Rectangle Canvas.Left="20" Canvas.Top="70" Width="70" Height="20" Fill="Beige"/> 
    </Canvas> 
+0

这取决于...请用您的画布显示XAML。 – LPL

+0

好的我已编辑答案 – lapots

+0

对不起,不清楚。为了定位控件的父级(您的Canvas的父级)至关重要。 – LPL

回答

3

为了达到这个效果,先用RenderTransform并将其命名为canvasTranform:

<Canvas x:Name="totle" KeyDown="Window_KeyDown"> 
    <Canvas.RenderTransform> 
     <TranslateTransform x:Name="canvasTransform" /> 
    </Canvas.RenderTransform> 
    <Ellipse Name="yio" Canvas.Left="40" Canvas.Top="40" Height="30" Width="30" Fill="Beige"/> 
    <Line X1="40" Canvas.Left="67" Canvas.Top="51" StrokeThickness="40" Stroke="Red" Height="10" Width="45" Fill="#FFD86464" OpacityMask="Red" /> 
    <Rectangle Canvas.Left="20" Canvas.Top="70" Width="70" Height="20" Fill="Beige"/> 
</Canvas> 

然后,在你的事件处理程序,通过名称引用TranslateTransform并设置X属性:

private void Window_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Right) 
     { 
      canvasTransform.X = 100; 
     } 
    } 

如果您将转换添加(随着您按右侧画布,画布继续向右移动每次添加到X属性:

private void Window_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Right) 
     { 
      canvasTransform.X += 100; 
     } 
    } 
+0

RenderTransform可以工作,但在LayoutTransform中,TranslateTransform不起作用。 – LPL

+0

@LPL - 你说得对,谢谢。我的猜测是他不希望变换影响布局,所以我只是用LayoutTransform删除了它。 – jeff

+0

@OP - 如果您确实希望转换能够影响布局,只需发表评论,我会尽量想办法为您做。 – jeff