如何在特定的x,y屏幕位置在WPF中绘制矩形?

zet*_*tar 8 wpf rectangles draw

在C#,WPF我创建了一个矩形:

        Rectangle myRgbRectangle = new Rectangle();
        myRgbRectangle.Width = 1;
        myRgbRectangle.Height = 1;
        SolidColorBrush mySolidColorBrush = new SolidColorBrush();
Run Code Online (Sandbox Code Playgroud)

是的,我真的只想要它是1像素乘1像素.我想根据变量高度改变颜色,如下所示:

        mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height);
        myRgbRectangle.Fill = mySolidColorBrush;
Run Code Online (Sandbox Code Playgroud)

现在,我如何在屏幕上的特定x,y位置绘图?我的MainWindow.xaml上有一个网格(myGrid).

谢谢!


这是相关的代码:

        myRgbRectangle.Width = 1;
        myRgbRectangle.Height = 1;
        SolidColorBrush mySolidColorBrush = new SolidColorBrush();

        int height;
        for (int i = 0; i < ElevationManager.Instance.heightData.GetLength(0); i++)
            for (int j = 0; j < ElevationManager.Instance.heightData.GetLength(1); j++)
            {
                height = ElevationManager.Instance.heightData[i, j] / 100;
                // Describes the brush's color using RGB values. 
                // Each value has a range of 0-255.
                mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height);
                myRgbRectangle.Fill = mySolidColorBrush;

                myCanvas.Children.Add(myRgbRectangle);
                Canvas.SetTop(myRgbRectangle, j);
                Canvas.SetLeft(myRgbRectangle, i);
Run Code Online (Sandbox Code Playgroud)

并且它抛出了这个错误:指定的Visual已经是另一个Visual的子项或CompositionTarget的根.

Mar*_*all 18

你需要使用Canvas一个Grid.您可以使用坐标来定位元素,Canvas而不是列和行中的元素Grid.

画布的定义:

定义一个区域,通过使用相对于"画布"区域的坐标,可以在其中显式定位子元素.

然后你会使用Canvas.SetTop和这样的Canvas.SetLeft属性(假设你的画布被命名myCanvas):

 myCanvas.Children.Add(myRgbRectangle);
 Canvas.SetTop(myRgbRectangle, 50);
 Canvas.SetLeft(myRgbRectangle, 50);
Run Code Online (Sandbox Code Playgroud)

编辑

根据您的编辑,就像我说你不止一次添加相同的矩形.每次添加时都需要在For循环中创建它.像这样的东西.

for (int i = 0; i < ElevationManager.Instance.heightData.GetLength(0); i++) 
    for (int j = 0; j < ElevationManager.Instance.heightData.GetLength(1); j++) 
    { 
        Rectangle rect = new Rectangle();
        rect.Width = 1;
        rect.Height = 1;
        height = ElevationManager.Instance.heightData[i, j] / 100; 
        // Describes the brush's color using RGB values.  
        // Each value has a range of 0-255. 
        mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height); 
        rect.Fill = mySolidColorBrush; 

        myCanvas.Children.Add(rect); 
        Canvas.SetTop(rect, j); 
        Canvas.SetLeft(rect, i); 
    }
Run Code Online (Sandbox Code Playgroud)