9

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

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

是的,我真的只是希望它是 1 像素乘 1 像素。我想根据可变高度更改颜色,如下所示:

        mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height);
        myRgbRectangle.Fill = mySolidColorBrush;

现在,我如何在屏幕上的特定 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);

它抛出了这个错误:指定的 Visual 已经是另一个 Visual 的子对象或 CompositionTarget 的根。

4

1 回答 1

20

您需要使用 a Canvasis 而不是 a Grid。您使用坐标来定位 a 中的元素,Canvas而不是 a 中的 Column 和 Row Grid

画布的定义:

定义一个区域,您可以在其中使用相对于 Canvas 区域的坐标显式定位子元素。

然后,您将像这样使用Canvas.SetTopCanvas.SetLeft属性(假设您的画布已命名myCanvas):

 myCanvas.Children.Add(myRgbRectangle);
 Canvas.SetTop(myRgbRectangle, 50);
 Canvas.SetLeft(myRgbRectangle, 50);

编辑

根据您的编辑,就像我说您不止一次添加同一个矩形一样。每次添加时都需要在 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); 
    }
于 2012-10-06T20:24:30.697 回答