有没有办法将包含绑定(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/