2009-10-25 122 views
3

我想知道WPF中是否有一种自动控件大小调整。WPF:自动控件大小调整

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

谢谢。

+0

您可以举一个你想要做什么的例子吗?你可以直接写 2009-10-25 22:28:28

回答

3

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

如果您希望您的UI缩放到窗口提供的可用空间,则可以使用a ViewBox control作为窗口的根元素。然后,你放在里面的所有东西都会根据你配置Viewbox的方式进行缩放。

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

3

答案是YES。如果您希望您的控件根据窗口的大小调整其大小,有很多方法可以实现。使用网格

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;