WPF,如何让窗体保持比例地改变尺寸
WPF,如何让窗体保持比例地改变尺寸,就是用鼠标改变窗体尺寸的时候,宽、高自动保持比例。
网上有些方法,窗体会有闪烁情况。
你有更好的方法没呢?
------解决方案--------------------估计你在网上找的方法是捕捉每一次鼠标拖动事件。这样系统会来不及反应,那是肯定会闪的。
建议你设置当鼠标放开后才修改窗体大小,或者是设置一个定时器,鼠标拖动事件发生时,或者OnResize事件发生时计数,当计数达到某个值时才修改窗体尺寸。
int count=0;
Window_OnResize(s,e){
count++;
if(count % 100 ==0){
//修改窗体
}
}
------解决方案--------------------估计下面的代码你看过.贴出来大家讨论一下.
要是想要恒定比例的话, 这个实现起来本来就有些困难,因为WPF 窗口的 border是win32的有些难控制,这里有个例子是当你改变宽度的时候同时维持高度:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.Width = 400;
this.Height = this.Width * 0.618;
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = HwndSource.FromVisual(this) as HwndSource;
if (source != null)
{
source.AddHook(new HwndSourceHook(WinProc));
}
}
public const Int32 WM_EXITSIZEMOVE = 0x0232;
private IntPtr WinProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, ref Boolean handled)
{
IntPtr result = IntPtr.Zero;
switch (msg)
{
case WM_EXITSIZEMOVE:
{
this.Height = this.Width * 0.618;
break;
}
}
return result;
}
}
还有一个方法就是override OneRednerSizeChanged事件:
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
var percentWidthChange = Math.Abs(sizeInfo.NewSize.Width&