3

我想知道 WPF 中是否有一种自动控制大小。

我的意思是,一种根据用户的屏幕分辨率自动调整元素大小的方法,而无需在代码中定义它。

谢谢。

4

2 回答 2

3

首先,WPF 使用设备独立像素,这意味着它将根据用户选择的 DPI 进行适当缩放。也就是说,我不认为您在这里询问 DPI,而是询问有关分辨率缩放的问题。

如果您希望 UI 缩放到 Window 提供的可用空间,您可以使用ViewBox 控件作为 Window 的根元素。然后,您放入其中的所有内容都将根据您配置 Viewbox 的方式进行缩放。

请记住,这不是应用程序使用的典型方法,因为它们通常会自行增长/重排以利用更多空间。例如,可以使用 Grid 来提供 UI 空间中更重要的部分,而不是另一个部分。

于 2009-10-25T22:32:14.787 回答
3

答案是肯定的。如果您希望控件根据窗口大小调整其大小,有很多方法可以做到。

对于几乎任何控制,这些都是有用的:

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;
于 2009-11-06T23:50:38.500 回答