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)
| 归档时间: |
|
| 查看次数: |
35563 次 |
| 最近记录: |