c# - 如何从 xaml 中获取显式指定的属性

标签 c# wpf properties grid children

我有一个带有网格子元素的循环。对于每个 child ,我想知道哪些属性已在 XAML 代码中明确指定。我有机会知道吗?

例如:我有一个文本框

<TextBox Height="150"/>

只有高度属性由 XAML 代码给出。我如何在 C# 代码中找到它? 换句话说,我不需要 TextBox 的所有属性,而只需要 XAML 中指定的属性。

最佳答案

这是一个具有挑战性的问题,但幸运的是,我喜欢很好的挑战。所以最初,我找到了 DependencyPropertyHelper.GetValueSource method .此方法采用 DependencyObjectDependencyProperty 并返回 ValueSource 结构:

ValueSource valueSource = DependencyPropertyHelper.GetValueSource(SomeTextBlock, 
    TextBlock.TextWrappingProperty);

ValueSource 结构 有一个 BaseValueSource enum 属性,它有以下成员:

enter image description here

这些值与 DependencyProperty 优先级列表相关,并指定可以更改 DependencyProperty 值的不同方式。 LocalBaseValueSource enum 实例值意味着该属性是使用 SetValue 方法在本地设置的...这 还包括使用 SetValue 方法在代码中设置属性的实例。框架使用此方法从 XAML 标记设置值。

唯一的问题是我们现在必须找到特定 DependencyObject 的所有 DependencyProperty 的集合,以便我们可以调用上述方法每个以查看它是否由 SetValue 方法设置。我希望 Microsoft 会为我们提供一些东西来为我们做这件事,但它似乎没有。

快速搜索后,我找到了使用 List properties of a DependencyObject? 中的 Reflection 执行此操作的方法。在 StackOverflow 上发帖。然而,我一直在寻找,然后发现了一个更好的方法……一个好得多的方法。我在 Getting list of all dependency/attached properties of an Object 中找到了它Visual Studio 论坛上的问题。

如果您在周勇的回答中查看该页面,您可以找到他创建的 DependencyPropertyHelper 类。起初我想“让我运行这个 DependencyPropertyHelper.GetValueSource 方法看看我得到了什么”,并期待 的所有 DependencyProperty 的长列表>文本 block

然而,事实证明,这种方法的结果正是您所追求的。它只返回 在 XAML 中实际设置的属性。在他的代码中,我看到了一个 MarkupObject、一个 MarkupProperty 和一个 MarkupWriter。我以前没有使用过这些,但看起来这实际上是在查看为 TextBlock 定义的 XAML。所以在帮助你的过程中,我实际上也学到了一些新东西……+1 个好问题。

考虑到这一点,我相信您可以忽略我前面关于 ValueSource struct 的回答,而只使用该方法。如果您需要更多帮助,请告诉我。

关于c# - 如何从 xaml 中获取显式指定的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119518/

相关文章:

c# - 无法使用 MSBUILD 构建我们的解决方案,它找不到我们的 .targets 文件

c# - 确定 byte[] 是否为 pdf 文件

c# - Asp.net Core RequestSizeLimit 仍然执行 Action

.net - 从绑定(bind)到 VM 的 CodeBehind 触发 RelayCommand

c# - 如何通过其子元素提取 DataTemplate 的绑定(bind)?

c# - 有条件地分配 C# var : As elegant as it gets?

WPF 数据模板和按钮

c# - 我检查了 INotifyPropertyChanged 但如何利用它?

android - 如何克服 "adb shell setprop"的属性长度限制

java - 将 Action 属性传递给 JavaScript 函数