WPF:自动控件大小调整

3

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

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

谢谢。


你能给一个你想要做的例子吗?你可以只写<TextElement Width="Auto" Height="Auto"...,或者你想要其他的东西吗? - Andrew Shepherd
2个回答

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;

3
首先,WPF使用设备独立像素,这意味着它会根据用户选择的DPI进行适当的缩放。话虽如此,我认为您在这里询问的不是DPI,而是关于分辨率的缩放。
如果您希望UI根据窗口提供的可用空间进行缩放,可以将ViewBox控件用作窗口的根元素。然后,您放置在其中的所有内容都将按照您配置ViewBox的方式进行缩放。
请注意,这并不是应用程序通常使用的典型方法,因为它们通常会自行增长/重新排列以利用更多的空间。例如,可以使用Grid来赋予UI的一个重要部分比其他部分更多的空间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接