WPF控件默认大小

5

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

2个回答

7
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)

好的,我同意你的答案。然而那并不是我真正想要的。最近我遇到了一个问题,因为DatePicker包含按钮,如果我在资源字典中更改按钮控件的宽度,它也会影响我的派生控件。 - fabien
所以你实际上是在寻找一种方法来知道宽度是否已经从其原始值改变了? - Ed Bayiates
1
好的,我已经在我的回答中添加了信息,说明如何检查非默认值的 Width 或其他 DependencyProperty,或者如何重置它们。 - Ed Bayiates

4

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


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