我想知道WPF中是否有一种自动控制大小。
我的意思是,一种自动调整元素与用户屏幕分辨率有关的方法,而不必在代码中定义它。
感谢。
答案 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;