WPF 控件默认大小

标签 wpf wpf-controls

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

最佳答案

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

如果您确实想测量在给定无限空间的情况下控件希望拥有的空间量,您可以创建它,使用+infinity、+infinity 的大小对其调用Measure,然后检查DesiredSize。对于大多数控件,这将为您提供控件所需的最小尺寸。如果您在 Measure 中给出固定大小,一些控件将返回他们想要所有这些空间,因为它们将大小调整到其容器(例如,网格、文本框、按钮...)。某些控件仅根据其内容调整大小,因此它们会告诉您不需要空间(例如 StackPanel)。

因此,您必须问自己,为什么在 WPF 中,几乎所有控件都被制作成根据它们的设置方式来调整其内容或容器的大小,为什么还要考虑 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)

关于WPF 控件默认大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6773541/

相关文章:

c# - 如何制作具有透明背景的禁用 RichTextbox?

wpf - 如何设置wpf slider 的拇指样式?

c# - 如何将 WPF 用户控件的宽度拉伸(stretch)到其窗口?

c# - 如何从 RichTextBox 获取 RTF

WPF - XAML - DataGridRow 样式触发器 IsMouseOver 工具提示数据绑定(bind)

c# - 在 XAML 中操作静态资源

c# - 无论如何将 RDL 报告内容加载到 WPF FlowDocument 或类似文件中?

c# - 绑定(bind) - 回调被调用两次

c# - WPF DataGrid 在渲染期间缓慢加载

c# - WPF中有没有类似于Visual Studio工具箱的控件?