gpt4 book ai didi

silverlight - 如何找到绑定(bind)到属性的所有目标依赖属性?

转载 作者:行者123 更新时间:2023-12-02 00:32:10 24 4
gpt4 key购买 nike

例如:

<UserControl>
<TextBox Text="{Binding Path=Foo, Mode=TwoWays}"/>
<TextBlock Text="{Binding Path=Foo}"/>
</UserControl>

在代码中,是否可以找到使用 Foo 属性作为源的依赖属性列表?

最佳答案

这真的取决于 H.B.指出,但即使在“简单”的情况下,它也会非常密集。

在您的示例中,假设您可以访问绑定(bind),您可以检查 Path 属性并查看它是否引用了您的“Foo”属性。但在某些情况下,这是行不通的。例如,像 {Binding Path=DataContext.Foo} 这样的绑定(bind)。路径可能比单个属性名称复杂得多。

此外,DataContext 可以根据您所在的位置进行更改。默认情况下,DataTemplate 中定义的元素不会继承其父数据上下文。所以如果你有:

<UserControl>
<ContextControl Content="Test">
<ContextControl.ContentTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Foo, Mode=TwoWay}"/>
</DataTemplate>
</ContextControl.ContentTemplate>
</ContextControl>
</UserControl>

然后 Foo 属性引用字符串 "Test" 而不是您的对象。还有一种情况是在绑定(bind)上使用 Source、ElementName 和 RelativeSource 属性。

假设您只有一个 DataContext 并且只使用单个单词路径,那么您可能会找到大部分(如果不是全部)目标。

首先,您需要遍历视觉树和逻辑树中的每个元素 VisualTreeHelper遍历可视化树。逻辑树会更诡异。

对于每个元素,您必须遍历定义的每个依赖属性。为此,您必须对 DependencyProperty 类型的公共(public)静态字段使用反射。

接下来,对于每个依赖属性,您必须调用 GetBindingExpression获取关联的 BindingExpression .然后您可以使用 ParentBinding 获取父绑定(bind)属性(property)。

然后就是简单的比较path属性了。

关于silverlight - 如何找到绑定(bind)到属性的所有目标依赖属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6347918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com