WPF:添加的线条没有显示在图像上
本文关键字:显示 图像 添加 WPF | 更新日期: 2023-09-27 18:11:15
我尝试在图像顶部添加一行。到目前为止,当我在一个只使用网格和图像的新项目中添加一条线时,它可以工作。
另一方面,当我在另一个项目中使用相同的代码时,添加的行是而不是,其中我还使用网格和带有其他元素的图像。我想这条线是添加的,但隐藏在图像本身或后面的另一个控件,网格或边界。所以我的问题是,我怎么能把我的线作为最顶部在图像前面?grid2.Children.Add(myLine);
轮廓看起来像这样: -> Grid1 -> 边境 -> Grid2 -> 图片(在这张照片我想添加一行)
line元素:
// Add a Line Element
static Line myLine = new Line
{
Stroke = Brushes.GreenYellow,
StrokeThickness = 2,
Visibility = Visibility.Visible
};
这里我读取了这一行的两个点:
private void image_zoom0_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
if (_firstPoint)
{
grid2.Children.Remove(myLine); // remove line first
System.Windows.Point position = Mouse.GetPosition(image_zoom0);
myLine.X1 = position.X;
myLine.Y1 = position.Y;
_firstPoint = false;
}
else
{
System.Windows.Point position = Mouse.GetPosition(image_zoom0);
myLine.X2 = position.X;
myLine.Y2 = position.Y;
_firstPoint = true;
grid2.Children.Add(myLine); // draw line
Canvas.SetZIndex(myLine,99);
}
}
}
我不确定您期望从这段代码中得到什么样的行为。但是,我创建了一个示例wpf应用程序,并原样复制了image_zoom0_MouseLeftButtonDown方法。
注意:
- 我已经为图像添加了Stretch="UniformToFill",以便它占据整个屏幕。 我已经将_firstPoint初始化为"false"。
后台代码
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
static Line myLine = new Line
{
Stroke = Brushes.GreenYellow,
StrokeThickness = 2,
Visibility = Visibility.Visible
};
bool _firstPoint;
private void image_zoom0_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
if (_firstPoint)
{
grid2.Children.Remove(myLine); // remove line first
System.Windows.Point position = Mouse.GetPosition(image_zoom0);
myLine.X1 = position.X;
myLine.Y1 = position.Y;
_firstPoint = false;
}
else
{
System.Windows.Point position = Mouse.GetPosition(image_zoom0);
myLine.X2 = position.X;
myLine.Y2 = position.Y;
_firstPoint = true;
grid2.Children.Add(myLine); // draw line
//Canvas.SetZIndex(myLine, 99);
}
}
}
}
现在根据写在MouseLeftButtonDown内部的逻辑,当你第一次点击图像时,从窗口的TopLeft到当前鼠标位置绘制一条线。第二次点击将简单地删除行。第三次点击将再次从鼠标的上一个位置到当前位置绘制一条线,第四次点击将再次删除它,依此类推
标题>