我想在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有一个插入符号。这些线应该像十字准线(并且有助于查看插入符的实际位置)
答案 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=">" />
</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=">" />
</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