我正在开发一个窗口大小为1200 * 932的WPF应用程序,包括标题栏。
它在我的桌面显示器上显示良好(2560 * 1440,缩放率为125%),实际尺寸为1500 * 1165。
但是,当我在笔记本电脑上运行它(2736 * 1824,缩放比例为200%)时,实际尺寸为2400 * 1864,这太大了。
怎么办呢?我的意思是动态?
编辑:
最初的问题可能不明确。对不起。
我想要做的就是UWP应用程序的工作原理。在我的桌面上,UWP应用程序默认窗口大小为1500 * 1165(可能为1200 * 932 * 125%);在笔记本电脑上,窗口大小为2048 * 1600(可能是1024 * 800 * 200%)。
UWP默认提供该功能吗? WPF可以这样做吗?我想可能是编程方式。
为什么不是UWP:我发现UWP正在使用沙盒。网络有一些限制,这对我的应用程序很重要。
如果你想改变应用程序窗口的大小,只需使用以下链接:WPF window size和这个wpf-windows-overview#window-size
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
SizeToContent="WidthAndHeight">
但我认为你正在寻找在WPF应用程序中的DPi集成检查他的链接以获取更多信息
https://docs.microsoft.com/en-us/windows/desktop/hidpi/declaring-managed-apps-dpi-aware
您误解的是您正在使用的单位。设置容器的宽度时,你不会告诉他例如宽度恰好是500像素。当你开始考虑字体时,这很有意义。 Fontsize 25在您的显示器上会很好,但是4 k显示器可能是简约的小型且不可读的。要解决这个问题,您设置容器的标准单位是1/96英寸。您可以在以下引用中修改它:
qualifiedDouble如上所述的double值,后跟以下单位声明字符串之一:px,in,cm,pt。
px(默认值)是与设备无关的单位(每单位1/96英寸)
in是英寸; 1英寸== 96PX
厘米是厘米; 1cm ==(96 / 2.54)px
pt是积分; 1pt ==(96/72)px
自动启用自动调整行为。见备注。
最后我知道我想要什么。问题中的描述不清楚:(
我希望应用程序大小(窗口大小以及内容大小)根据屏幕分辨率和缩放进行调整,以便我的应用程序在第一次午餐时占用(几乎)相同的屏幕分区。永远不要变得太大,越过屏幕,也不要太小,看不清楚。
所以我让我的窗口Height
和Width
绑定到
public double ReSizeWidth
{
get
{
return ((float)SystemParameters.VirtualScreenWidth) * (1500f / 2560f);
// 1500f / 2560f is the percentage
}
}
public double ReSizeHeight
{
get
{
return ReSizeWidth * 0.75f + 32;
// keep the window aspect ratio
}
}
并将此添加到Grid
以外的最外层
<Grid.LayoutTransform>
<ScaleTransform CenterX="0"
CenterY="0"
ScaleX="{Binding ElementName=myMainWindow, Path=ScaleValue}"
ScaleY="{Binding ElementName=myXMainWindow, Path=ScaleValue}"/>
</Grid.LayoutTransform>
代码背后
public double ScaleValue
{
get
{
return ReSizeWidth / 1200;
// 1200 is the design height
}
}
虽然它可以工作,但我认为它可能会导致一些不好的效果,如模糊或锯齿。我认为应该有一个内置功能或其他东西来实现这一目标。