如何旋转(90度)面板控件?我知道它在WPF中非常简单,但我无法使用它。 你知道WinForm面板控件的这种方式吗? 谢谢大家!
答案 0 :(得分:1)
您必须覆盖OnPaint,然后使用GDI手动绘制panel上的所有控件。我从未做过旋转,但是我已经为下拉菜单做了一些自定义重绘。您需要为面板上的每种控件类型编写自定义OnPaints。
更多关于这一点,因为我只是尝试了我自己...我不认为你可以自定义绘制大多数常见控件。 WPF是一种不同的动物,旨在支持这种类型的东西。当这些控件涂漆时,它们会在封面下进行涂漆,而您无法做任何事情。我能够绘制和旋转面板,但我无法像复选框那样执行其他控件。
public class RotatePanel : Panel, IRotate
{
public RotatePanel() : base()
{
Angle = 0;
}
protected override void OnPaint(PaintEventArgs e)
{
using (Graphics g = this.CreateGraphics())
{
foreach (IRotate control in this.Controls)
{
control.Angle = Angle;
}
g.RotateTransform(Angle);
g.DrawRectangle(new System.Drawing.Pen(new SolidBrush(Color.Black), 2f), 4f, 4f, 10f, 10f);
g.DrawRectangle(new System.Drawing.Pen(new SolidBrush(Color.Azure), 2f), 14f, 14f, 30f, 30f);
g.Flush();
}
base.OnPaint(e);
}
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
}
public float Angle
{
get;
set;
}
}
public interface IRotate
{
float Angle { get; set; }
}
public class RotateCheckBox : CheckBox, IRotate
{
public float Angle { get; set; }
public RotateCheckBox():base()
{
Angle = 0;
}
protected override void OnPaint(PaintEventArgs pevent)
{
pevent.Graphics.RotateTransform(this.Angle);
pevent.Graphics.Flush();
base.OnPaint(pevent);
}
}