2011-07-21 143 views
3

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

回答

3

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

6

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

如果您确实想测量控件在给定无限空间时想要拥有的空间量,则可以创建它,使用大小为+ infinity,+ infinity的方式调用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) 
+0

好的我同意你的答案。然而那不是我真正想要的。我最近有一个问题与我的主题,因为DatePicker包含按钮。如果我改变了ressourceDictionary中按钮控件的宽度,它也会影响我的派生控件。 – fabien

+0

所以你实际上在寻找一种方法来知道宽度是否已经从原始值改变了? –

+0

是的,否则我们可能会遇到意外的结果 – fabien