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);
そして、このエラーがスローされます。指定されたビジュアルは、すでに別のビジュアルの子またはCompositionTargetのルートです。
Canvas
の代わりに Grid
を使用する必要があります。座標を使用して、要素をCanvas
に配置し、列と行をGrid
に配置します。
キャンバスの定義:
Canvas領域に相対的な座標を使用して、子要素を明示的に配置できる領域を定義します。
次に、 Canvas.SetTop
および Canvas.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);
}