C#で長方形の角度プロパティを設定することは可能ですか?
私はこれを試しました:
Rectangle r = new Rectangle();
r.Width = 5;
r.Height = 130;
r.Fill = Brushes.Black;
r.RotateTransform.AngleProperty = 30; // Here is the problem
canvas1.Children.Add(r);
これを行う 1 つの方法は、オブジェクトのプロパティにRotateTransformationを適用することです。RenderTransform
r.RenderTransform = new RotateTransform(30);
RotateTransform rt1 = new RotateTransform();
rt1.Angle =30;
r.RenderTransform= rt1;
また
r.RenderTransform= new RotateTransform(30);
依存関係プロパティのバッキングフィールドを設定しようとしています。これは読み取り専用であり、そのように使用するためのものではありません。
代わりに正しいプロパティを使用してください。
r.RenderTransform.Angle = 30;
また、新しいRectangleにはデフォルトでRotateTransformがないので、おそらくその新しいインスタンスも作成する必要があります。
r.RenderTransform= new RotateTransform();
昨日私は同じ問題を解決しました。これは私がWinFormsで使用しているものです:
GraphicsState graphicsState = graphics.Save();
graphics.TranslateTransform(this.Anchor.Position.X, this.Anchor.Position.Y);
graphics.RotateTransform(this.Anchor.Rotation);
graphics.FillRectangle(new SolidBrush(this.Anchor.Color), this.Anchor.GetRelativeBoundingRectangle());
graphics.Restore(graphicsState);
アンカーは私が作成したクラスです。それは私自身の長方形から派生しています
internal class Rectangle
{
public PointF Position { get; set; }
public Color Color { get; set; }
public SizeF Size { get; set; }
public float Rotation { get; set; }
public RectangleF GetRelativeBoundingRectangle()
{
return new RectangleF(
new PointF(-this.Size.Width / 2.0f, -this.Size.Height / 2.0f),
this.Size);
}
}
長方形の位置は、長方形の中央(中心)点であり、左上隅ではありません。
したがって、最初のコード部分に戻るには、次のようにします。
GraphicsState graphicsState = graphics.Save();
グラフィックデバイスの状態を保存するので、やりたいことが何でもできて、元のビューに戻ることができます。次に、位置システムを長方形の中心に変換し、回転を実行します
graphics.TranslateTransform(this.Anchor.Position.X, this.Anchor.Position.Y);
graphics.RotateTransform(this.Anchor.Rotation);
次に、長方形を描きます。この部分は、長方形の描画方法に基づいて、明らかに異なります。おそらく、FillRectangle(私が行うように)または境界線のみを描画するDrawRectangleのいずれかを使用します。
graphics.FillRectangle(new SolidBrush(this.Anchor.Color), this.Anchor.GetRelativeBoundingRectangle());
最後に、グラフィックデバイスの元の状態を復元します。これにより、回転した長方形の描画にのみ使用した平行移動と回転がキャンセルされます。
graphics.Restore(graphicsState);
Rectangle で角度を変更するには、傾斜変換を適用する必要があります。これを見てください:方法:要素を傾斜させる