在回答之前请先阅读我的问题,我知道有关“制作液体布局”等所有建议......
我想在全高清(1920x1080又称1080p)中显示带有背景图像的全屏应用程序,假设屏幕分辨率也是1080p,无论显示器的DPI设置如何都应该。换句话说,背景图像应该以1080p分辨率占据整个屏幕。
另一个复杂因素:此背景图像有几个矩形区域,我想将其他次要图像放入其中。
根元素将是一个Canvas,然后在其上叠加背景图像,然后堆叠辅助内容(照片图像,按钮等......)所有这些都必须与背景正确对齐。
见下图:
----------------------------------------
| Background image with rectangular area below
| ___________________________
| | |
| | |
| | Picture area with |
| | secondary image stacked |
| | on top |
| | |
问题是:怎么做?
首先请注意以下公式(desiredPixels是您在XAML中编写的内容,realPixels是监视器上显示的内容,DPI是您的监视器DPI)。
realPixels = desiredPixels*DPI/96
意味着:
desiredPixels = realPixels * 96 / DPI
请参阅http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/11/30/wpf-is-dpi-depended.aspx
我提出的想法(但尚未实现)是首先使用实际像素大小设计您的XAML,然后在布局阶段之后,以编程方式向下走逻辑树并调整所有Canvas.Left,Canvas.Top ,宽度和高度测量值乘以96/DPI
。
编辑:我刚读完我链接的博文。他建议使用自定义标记来完成元素的传递。
Edit2:应用程序必须在具有可能不同DPI设置的不同计算机上运行。因此,它必须动态读取DPI值并相应地调整布局。
答案 0 :(得分:3)
在评论之后,是的,Viewbox
内的所有内容都会按比例缩放,包括画布上元素的位置。
这是Rectangle
内蓝色Canvas
上的红色Viewbox
。 Canvas.Left
上的Canvas.Top
和Rectangle
都设置为20个与设备无关的单元。
启动时:
当窗口放大时:
缩小窗口时:
注意:使用Rooler
完成像素测量