0
如何旋轉(90度)面板控件?我知道這是非常簡單的WPF,但我不能使用它。 你知道WinForm面板控制的這種方式嗎? 謝謝大家!在WinForm中旋轉面板
如何旋轉(90度)面板控件?我知道這是非常簡單的WPF,但我不能使用它。 你知道WinForm面板控制的這種方式嗎? 謝謝大家!在WinForm中旋轉面板
您將不得不重寫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);
}
}
只是出於好奇,爲什麼你不能使用WPF?你知道ElementHost,對嗎?我很感興趣,因爲我們正在考慮在我們的WinForms應用程序中添加一些WPF,並且我很好奇你爲什麼不能。 – 2010-10-26 22:39:05