gpt4 book ai didi

c# - WPF 解析绑定(bind)表达式

转载 作者:行者123 更新时间:2023-11-30 15:33:41 25 4
gpt4 key购买 nike

有没有办法将包含绑定(bind)表达式的字符串转换为绑定(bind)对象?

一个简单的例子是"{Binding Path}",

或:

“{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=views:IPage}, Path=TensileTestChange}”

实际的绑定(bind)表达式存储在 XML 中,它是 XAML 文档的更高级别表示。

最佳答案

你要问的是解析 MarkupExtension .我无法直接找到 WPF 的实现(它包含在 XamlReader.Parse 调用链中的某处)。

谷歌搜索后,似乎没有现成的解决方案可用于执行此操作。但是,如果您有一些编写解析器的经验,您可以自己编写。解析 MarkupExtension 的规范在 MSDN 上给出。 .

作为解决方法,您可以在放置绑定(bind)的位置伪造一个控件:

string myBindingExpression = "{Binding MyProperty}";

var test = "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Text=\""
+ myBindingExpression + "\" />";
var result = XamlReader.Parse(test) as TextBlock;
var bindingExpression = result.GetBindingExpression(TextBlock.TextProperty);

Binding binding = bindingExpression.ParentBinding

这将创建一个将绑定(bind)作为 Text 属性的 TextBlock。它将为您提供具有根据绑定(bind)表达式设置的属性的绑定(bind)对象。

然后您可以在任何地方应用绑定(bind)。

不过请记住,对于带有 xmlns 前缀的更复杂的示例,您需要包含 xmlns:views="..."在假TextBlock , 否则它将不知道如何处理前缀。

示例:<TextBlock xmlns:views="..." xmlns="..." Text="{Binding MyProperty}" />

关于c# - WPF 解析绑定(bind)表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163138/

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