WPF,如何让窗体保持比例地改变尺寸

2013-10-12 08:47:23
WPF,如何让窗体保持比例地改变尺寸,就是用鼠标改变窗体尺寸的时候,宽、高自动保持比例。
网上有些方法,窗体会有闪烁情况。
你有更好的方法没呢?
...全文
803 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dreaman88 2015-08-27
  • 打赏
  • 举报
回复
<Viewbox Stretch="Fill" > <Canvas Width="434" Height="356" > <!--此处放你的控件--> </Canvas> </Viewbox>
2013-10-17
  • 打赏
  • 举报
回复
帮顶.............
  • 打赏
  • 举报
回复
你可以自己做一个“边框”,哪怕是完全模仿window窗体的边框(多么丑陋啊!),然后把windows窗体设置为无边框的、透明的,这样你自己的边框捕获鼠标操作。 实际上,好的程序没有必要弄成矩形边框。例如 这样的 UI 设计才是 WPF 程序员最好体现技术(仅需要30分钟)的。
  • 打赏
  • 举报
回复
很简单,将你的界面放在 ViewBox 控件内就行了。
2013-10-12
  • 打赏
  • 举报
回复
有好的办法吗?
linuxca 2013-10-12
  • 打赏
  • 举报
回复
估计下面的代码你看过.贴出来大家讨论一下. 要是想要恒定比例的话, 这个实现起来本来就有些困难,因为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 - sizeInfo.PreviousSize.Width) / sizeInfo.PreviousSize.Width; var percentHeightChange = Math.Abs(sizeInfo.NewSize.Height - sizeInfo.PreviousSize.Height) / sizeInfo.PreviousSize.Height; if (percentWidthChange > percentHeightChange) this.Height = sizeInfo.NewSize.Width / 0.6; else this.Width = sizeInfo.NewSize.Height * 0.6; base.OnRenderSizeChanged(sizeInfo); }
bwangel 2013-10-12
  • 打赏
  • 举报
回复
估计你在网上找的方法是捕捉每一次鼠标拖动事件。这样系统会来不及反应,那是肯定会闪的。 建议你设置当鼠标放开后才修改窗体大小,或者是设置一个定时器,鼠标拖动事件发生时,或者OnResize事件发生时计数,当计数达到某个值时才修改窗体尺寸。 int count=0; Window_OnResize(s,e){ count++; if(count % 100 ==0){ //修改窗体 } }
2013-10-12
  • 打赏
  • 举报
回复
是不是要用到Winform中的用过的双缓冲?
2013-10-12
  • 打赏
  • 举报
回复
是不是要用到Winform中的用过的双缓冲?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧