问题:
WPF开发 想自适应各种分辨率。设计图是19201080 的。
<viewbox>
<Grid Width="1920" Height="1080">
<RichTextBox/>
</Grid>
</viewbox>
这样的话。界面上所有布局都是按照19201080下的设计宽度来的。所有控件都没有问题 只有TextBox 和 RichTextBox 会有光标消失的问题(感觉是线太细了显示不出来),请问一下有什么解决办法吗
回答1:
我不太想回答你的“Viewbox中的RichTextBox输入光标消失”的问题,在我过去的项目中遇到过2k、4k甚至更大分辨率的屏幕,如集群渲染机在一块超大分辨率屏幕下分割显示等情景。我的结论是自适应各种分辨率靠的不是简单缩放,而是布局自适应,就像鸿蒙多端自动适配的功能。但鸿蒙要做的是系统层面的自适应,现阶段很难很难。微软、苹果和谷歌在这边面已经做了很多努力,如微软的.NET Standard for UWP以及XAML,谷歌的Flutter,和苹果WWDC20提到的,SwiftUI几乎是下一代Apple全平台融合的首选框架。很长一段时间的自适应还是需要我们程序员来实现的,并且也没有完美方案。
自适应这块Web相较于PC远远走在前列。Bootstrap 很早就支持响应式设计了。
超小屏幕 | 小屏幕 | 中等屏幕 | 大屏幕 |
---|---|---|---|
手机 (<768px) | 平板 (≥768px) | 桌面 (≥992px) | 桌面 (≥1200px) |
WPF仅用于桌面端,屏幕没那么复杂。虽然现在分辨率各种各样,如1366 x 768、1920 x 1080、3000 x 2000(MateBook、Surface Book)、2736 x 1824(Surface Pro)、3240 x 2160(Surface Book)、3840x2160(Lenovo),但屏幕比例相差不大。
利用WPF的容器控件,尽可能设置控件的HorizontalAlignment、VerticalAlignment和Grid的按比例布局,而不是Width、Height、Margin、Padding,即所有属性一旦设置了像素数值就很难做到适应。那用Viewbox不是能很好的缩放么,在一定的范围内还行,缩放稍微过大就会有问题,不管设为Fill、Uniform,还是UniformToFill,要么变形失真,要么缩小到看不见,这种自适应用户是很难受的。
赘述这么多,到底该怎样做呢。举个栗子,Win10开始菜单的磁贴布局摆放,是可以根据开始菜单的大小进行自适应的,如果菜单比较宽,横向可以显示更多的磁贴,如果宽度变窄则竖向显示更多磁贴,再通过滚动滚动条查看更多内容。再举个栗子,一个软件配置窗口,正常1920 x 1080分辨率下是可以完全一屏显示下所有配置项的,但如果软件使用win10的左右二分屏,那软件横向区域会减少一半,通过将更多的内容纵向排列以及显示滚动条照样可以很好的显示。这种方式才是响应式布局,不会出现上面缩放提到的变形失真和字体模糊。再加上win10的系统级缩放,超分辨率下显示效果也会很好。所以我们应该避免使用放大镜式的缩放,辛苦点,做一些响应式布局的工作,对于wpf来说,这不难。
回答2:
.....TextBox 的高度设高一点,有时候设计图和实际是不一样的...
回答3:
既如此你搞一个粗大的光标试试不就行了。