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:添加的线条没有显示在图像上

我不确定您期望从这段代码中得到什么样的行为。但是,我创建了一个示例wpf应用程序,并原样复制了image_zoom0_MouseLeftButtonDown方法。

注意:

  • 我已经为图像添加了Stretch="UniformToFill",以便它占据整个屏幕。
  • 我已经将_firstPoint初始化为"false"。
<标题> XAML h1>

后台代码

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到当前鼠标位置绘制一条线。第二次点击将简单地删除行。第三次点击将再次从鼠标的上一个位置到当前位置绘制一条线,第四次点击将再次删除它,依此类推