绘制线并以编程方式移动它

时间:2012-03-14 08:53:44

标签: c# wpf drawing line move

我想在WPF网格上画一条线。

private void InitializeTestline()
{
    testline = new Line();
    grid.Children.Add(testline);
    testline.X1 = 0;
    testline.X2 = 1;
    testline.Y1 = 0;
    testline.Y2 = 1;
    testline.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
    testline.VerticalAlignment = System.Windows.VerticalAlignment.Top;
    testline.Stroke = Brushes.Red;
    testline.Stretch = Stretch.Fill;
    testline.StrokeThickness = 2;
    testline.Visibility = System.Windows.Visibility.Visible;
}

它没有问题。但现在我想在网格上添加四个按钮(向上,向下,向左,向右)。因此,当我按下其中一个按钮时,线条应朝我选择的方向移动。

private void MoveUp_Click(object sender, RoutedEventArgs e)
{
    this.testline.Y1 += move;
    this.testline.Y2 += move;
}

这是我想要使用的功能,但它不起作用。那么如何移动这条线?

最后,我有一个像旧的终端3270这样的gui,这些gui有一个插入符号。这些线应该像十字准线(并且有助于查看插入符的实际位置)

2 个答案:

答案 0 :(得分:3)

首先,我不会操纵坐标,因为它们主要用于定义线的形状。 其次,我不会使用Canvas,而是使用渲染转换,因为它可能在GPU而不是CPU上运行,这使得动画更加流畅。

所以我会做这样的事情:

XAML:

<Grid x:Name="LayoutRoot">

    <Line x:Name="crosshair"
          HorizontalAlignment="Left"
          VerticalAlignment="Top"
          Stroke="Red"
          X1="0"
          X2="0"
          Y1="10"
          Y2="0" />

    <Button Width="50"
            Height="50"
            HorizontalAlignment="Right"
            Click="MoveRight"
            Content="&gt;" />
</Grid>

代码背后:

   public partial class MainWindow : Window
    {
        private int moveRightDist = 0;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void MoveRight(object sender, RoutedEventArgs e)
        {
            this.moveRightDist++;
            crosshair.RenderTransform = new TranslateTransform(this.moveRightDist, 0);
        }
    }

<Grid x:Name="LayoutRoot">

    <Line x:Name="crosshair"
          HorizontalAlignment="Left"
          VerticalAlignment="Top"
          Stroke="Red"
          X1="0"
          X2="0"
          Y1="10"
          Y2="0" />

    <Button Width="50"
            Height="50"
            HorizontalAlignment="Right"
            Click="MoveRight"
            Content="&gt;" />
</Grid>

重要!如果您在XAML中定义仿射变换矩阵并为其设置动画,在某些时候WPF将替换该矩阵的实例,如果您在代码中引用该矩阵,则可能不是能够操纵一个物体。

Side注意:我宁愿在XAML中创建所有UI元素(Blend是一个很好的工具),然后使用从后面的代码中引用它们。

答案 1 :(得分:-1)

我只在迷宫上做同样的基本事情,这就是我要做的事情

private void Move_Up Click(object sender, RoutedEventArgs e)
{
  Point testlinelocation;
  testlinelocation = testline.Y1;
  testlinelocation.Offset(someX, someY);
  testlinelocation = testline.Y1;
}

这应该有用,它对我有用,祝你好运这是winforms