WPF控件默认大小

时间:2011-07-21 08:56:54

标签: wpf wpf-controls

为wpf应用程序定义自定义资源主题时,我可以设置宽度/高度等...如何找到这些属性的默认值(即框架中提供的控件中使用的值)?

2 个答案:

答案 0 :(得分:6)

WPF控件通常不包含任何类型的默认大小。 WPF的主要功能之一是除非您指定大小,否则所有内容都会动态调整大小。

如果你想测量一个控件在给定无限空间时想拥有的空间量,你可以创建它,用尺寸为+无穷大,+无穷大调用Measure,然后检查DesiredSize。对于大多数控件,这将为您提供控件所需的最小尺寸。如果你在Measure中给出一个固定的大小,一些控件将返回他们想要的所有空间,因为它们的大小是它们的容器(例如,Grid,TextBox,Button ...)。有些控件的大小仅限于其内容,因此它们会告诉您他们不需要空格(例如,StackPanel)。

所以你必须问问自己为什么你几乎所有的控件都会在WPF中考虑默认大小的概念,以便它们根据它们的设置大小调整其内容或大小到容器。您要测量的主要内容是文本,您可以使用上面的技巧来处理TextBlock或图像等项目。

编辑以查询任何DependencyProperty的默认值,使用该属性的元数据:

double defaultWidth = double.NaN;
PropertyMetadata widthMeta = TextBlock.WidthProperty.DefaultMetadata;
if (widthMeta != null && widthMeta.DefaultValue is double)
    defaultWidth = widthDefault.DefaultValue;

要将DependencyProperty重置为其默认值,请调用DependencyObject的ClearValue:

MyTextBlock.ClearValue(TextBlock.WidthProperty);

检查本地设定值:

if (MyTextBlock.ReadLocalValue(TtextBlock.WidthProperty) != DependencyProperty.UnsetValue)

答案 1 :(得分:3)

FrameworkElements的默认宽度和高度为Double.NaN。如果您没有指定不同的大小,那么WPF控件将自动调整大小以尝试适合其内容,容器或两者。