WPF:自动控制大小调整

时间:2009-10-25 21:40:05

标签: wpf resize resolution

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

我的意思是,一种自动调整元素与用户屏幕分辨率有关的方法,而不必在代码中定义它。

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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;