2

私のXAMLでは、グリッドにリストボックスといくつかのテキストボックスがあり、キャンバスに反応角があります:

Title="MainWindow" Height="350" Width="500" WindowStartupLocation="CenterScreen">
<Grid>
<ListBox HorizontalAlignment="Left"
         Margin="12,12,0,12"
         Name="listBoxContainer"
         Width="120">
    <ListBoxItem Content="Item1" />
    <ListBoxItem Content="Item2" />
    <ListBoxItem Content="Item3" />
</ListBox>

<TextBox Height="23"
         Margin="138,12,85,0"
         Name="textBoxAddress"
         VerticalAlignment="Top" />

<TextBox Margin="138,41,85,12"
         Name="textBoxMsg" />

<Button Content="Button"
        Name="buttonAnimation"
        Width="75"
        Margin="0,10,5,0"
        Height="23"
        VerticalAlignment="Top"
        HorizontalAlignment="Right"
        Click="Button1Click" />

<Canvas Name="CanvasAnimation">
    <Rectangle Canvas.Left="408" 
               Canvas.Top="140" 
               Height="50" 
               Name="rectAnimation" 
               Stroke="Black" 
               Width="50" />
</Canvas>
</Grid>

私のコードビハインドから、長方形をその位置から遠くに移動できます:

private void Button1Click(object sender, RoutedEventArgs e)
{
    var trs = new TranslateTransform();
    var anim3 = new DoubleAnimation(0, -200, TimeSpan.FromSeconds(2));
    trs.BeginAnimation(TranslateTransform.XProperty, anim3);
    trs.BeginAnimation(TranslateTransform.YProperty, anim3);
    CanvasAnimation.RenderTransform = trs;
}

座標によって長方形をその位置から別の位置に移動する方法を知りたいですか? 四角形をリストボックスまたはテキストボックスの位置に移動させるように

4

2 に答える 2

3

以下のコードは、キャンバス上のボタンとフォーム上のボタンの座標が同じであると仮定していることに注意してください。これは最適ではありません。キャンバスにボタンを配置するなど、より良い解決策を見つける必要があります。

private void Button1Click(object sender, RoutedEventArgs e)
{
  //Point relativePoint = buttonAnimation.TransformToAncestor(this).Transform(new Point(0, 0));
  Point relativePoint = buttonAnimation.TransformToVisual(CanvasAnimation).Transform(new Point(0, 0));

  var moveAnimX = new DoubleAnimation(Canvas.GetLeft(rectAnimation), relativePoint.X, new Duration(TimeSpan.FromSeconds(10)));
  var moveAnimY = new DoubleAnimation(Canvas.GetTop(rectAnimation), relativePoint.Y, new Duration(TimeSpan.FromSeconds(10)));

  rectAnimation.BeginAnimation(Canvas.LeftProperty, moveAnimX);
  rectAnimation.BeginAnimation(Canvas.TopProperty, moveAnimY);
}
于 2013-02-20T12:41:53.863 に答える
0

回答が遅くなり申し訳ありませんが、依存関係プロパティを設定したいようです。

rectAnimation.SetValue(Canvas.TopProperty, 0.0);
rectAnimation.SetValue(Canvas.LeftProperty, 0.0);

これにより、四角形が含まれているキャンバスの上部と左側に (即座に) 配置されます。

于 2014-10-01T03:32:21.843 に答える