WPF控件默认大小

fab*_*ien 3 wpf wpf-controls

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

Ed *_*tes 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;
Run Code Online (Sandbox Code Playgroud)

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

MyTextBlock.ClearValue(TextBlock.WidthProperty);
Run Code Online (Sandbox Code Playgroud)

要检查本地设置的值:

if (MyTextBlock.ReadLocalValue(TtextBlock.WidthProperty) != DependencyProperty.UnsetValue)
Run Code Online (Sandbox Code Playgroud)


Sea*_*n U 4

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