我想知道 WPF 中是否有一种自动控制大小。
我的意思是,一种根据用户的屏幕分辨率自动调整元素大小的方法,而无需在代码中定义它。
谢谢。
首先,WPF 使用设备独立像素,这意味着它将根据用户选择的 DPI 进行适当缩放。也就是说,我不认为您在这里询问 DPI,而是询问有关分辨率缩放的问题。
如果您希望 UI 缩放到 Window 提供的可用空间,您可以使用ViewBox 控件作为 Window 的根元素。然后,您放入其中的所有内容都将根据您配置 Viewbox 的方式进行缩放。
请记住,这不是应用程序使用的典型方法,因为它们通常会自行增长/重排以利用更多空间。例如,可以使用 Grid 来提供 UI 空间中更重要的部分,而不是另一个部分。
答案是肯定的。如果您希望控件根据窗口大小调整其大小,有很多方法可以做到。
对于几乎任何控制,这些都是有用的:
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="..." (set your margin to control the position)
对于使用网格的灵活布局:
<Grid>
ColumnDefinition.Width="*"
RowDefinition.Height="*"
对于被面板包围的中心区域,或填充行/列的其余部分:
<DockPanel>
为了保持相同的形状但拉伸或收缩以适应:
<ViewBox>
还有很多其他的。
如果您希望您的控件根据用户的 Windows 显示设置(例如 DPI)在屏幕上变大或变小,默认情况下会发生这种情况。如果用户使系统图标和字体更大,您的文本、图标、字体等也会更大。
如果要将屏幕上对象的大小与特定的系统设置绑定,可以绑定到 SystemParameters 和 SystemFonts 类中的属性,例如:
SystemFonts.CaptionFontSize
SystemFonts.MenuFontSize
SystemFonts.IconFontSize
SystemFonts.StatusFontSize
SystemParameters.IconHeight
SystemParameters.IconVerticalSpacing
SystemParameters.MaximizedPrimaryScreenHeight
这些设置大约有 75 个。通常您不会使用这些,因为 WPF 基于 DPI 对对象大小进行的正常调整通常就足够了。
通常,您不希望将屏幕上的对象强制为特定数量的像素,因为即使最终用户将 Windows 配置为使对象看起来很大,它们在高分辨率屏幕上也会显得很小。这不会是一件好事。这里的一个例外是,如果您想将屏幕截图捕获为特定屏幕分辨率的位图。在这种情况下,您可以按如下方式设置您的尺寸:
control.Height =
desiredHeightInActualScreenPixels
* System.Windows.SystemParameters.MenuHeight
/ System.Windows.Forms.SystemInformation.MenuHeight;