社区
C#
帖子详情
WPF,如何让窗体保持比例地改变尺寸
朾
2013-10-12 08:47:23
WPF,如何让窗体保持比例地改变尺寸,就是用鼠标改变窗体尺寸的时候,宽、高自动保持比例。
网上有些方法,窗体会有闪烁情况。
你有更好的方法没呢?
...全文
803
9
打赏
收藏
WPF,如何让窗体保持比例地改变尺寸
WPF,如何让窗体保持比例地改变尺寸,就是用鼠标改变窗体尺寸的时候,宽、高自动保持比例。 网上有些方法,窗体会有闪烁情况。 你有更好的方法没呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Dreaman88
2015-08-27
打赏
举报
回复
<Viewbox Stretch="Fill" > <Canvas Width="434" Height="356" > <!--此处放你的控件--> </Canvas> </Viewbox>
朾
2013-10-17
打赏
举报
回复
帮顶
.............
以专业开发人员为伍
2013-10-13
打赏
举报
回复
你可以自己做一个“边框”,哪怕是完全模仿window窗体的边框(多么丑陋啊!),然后把windows窗体设置为无边框的、透明的,这样你自己的边框捕获鼠标操作。 实际上,好的程序没有必要弄成矩形边框。例如
这样的 UI 设计才是 WPF 程序员最好体现技术(仅需要30分钟)的。
以专业开发人员为伍
2013-10-13
打赏
举报
回复
很简单,将你的界面放在
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中的用过的双缓冲?
WPF
实现
窗体
内容分割
WPF
提供了一个GridSplitter控件,该控件可以像其他Contorls一样添加到Grid元素的单元格当中,特殊的是它将自动与最接近的网格线整合在一起,当拖动GridSplitter控件时,单元格的宽度和高度将会发生
改变
。Xmal源码如下: <Window x:Class="分割
窗体
.MainWindow" xmlns="http://schemas.mic...
WPF
窗体
自适应电脑分辨率的问题
如何解决
WPF
窗体
自适应电脑分辨率前言一、DockPanel二、使用方法1.引入代码总结 前言 很多时候做
WPF
窗体
的控件在运行展示的时候会有放大缩小的操作,这时候有些控件或者控件的文本就不能够随着
窗体
的放大缩小而
改变
,本文就为了解决这个问题 一、DockPanel 1、无论你是将
窗体
做成全屏还是自定义了
窗体
的高度和宽度,都可以利用DockPanel控件来进行布局。原因是DockPanel控件有一个LastChildFill="True"属性,表示DockPanel中的最后一个子元素可以拉伸以填充剩.
WPF
透明窗口可以调整
尺寸
(通过拖拽窗口边缘)
WPF
透明窗口可以调整
尺寸
(通过拖拽窗口边缘) 本文遵循 CC 4.0 BY-SA 版权协议 作者:絮大王 通过这篇文章,我们可以实现: 让
WPF
的透明窗口可以通过拖拽窗口的边缘,自由的调整
尺寸
。 我们可以通过拖拽窗口的上方,来移动窗口。 我们可以禁止窗口拖到屏幕边缘时自动最大化。 还可以等
比例
的
改变
窗口的大小。 还可以等
比例
的
改变
窗口中控件的大小 ...
wpf
控件大小随
窗体
大小
改变
而
改变
WPF
可以直接通过设置图形类控件的水平和垂直Alighment为Stretch实现用一个ViewBox装上所有的Window内容然后当window缩放时就可以一起放大缩小了ViewBox的显示机制是,先在内存中把按照逻辑大小把子控件显示出来,然后等
比例
的缩放显示到ViewBox的客户区 例: Button btn = new Button(); btn.HorizontalAl...
WPF
计算电脑屏幕缩放
比例
我在两台都是win10机器上试了一下,在不重启插件,也不重启电脑情况下,
改变
屏幕缩放
比例
,发现有一台DpiX和DpiY是没有任何变化的,所以我个人认为,Dpi是不能完美解决问题的,而且围绕这个Dpi解决问题,反而增加了我们开发的难度,非常不划算。如下面左边的图预截取的区域有文本,但是截图之后,竟然啥都没有了。原因还是一样,截取的矩形是截取
窗体
的一个控件,区域坐标是按照125%放大之后的进行计算,但是截图矩形区域转换成Bitmap对象之后其坐标是相对于真实屏幕来衡量,导致截取矩形区域坐标错位。
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章