Что вы просите, так это разобрать MarkupExtension
. Я не смог найти реализацию WPF напрямую (она содержится где-то в цепочке вызовов XamlReader.Parse
).
После некоторых поисковых запросов, похоже, для этого нет готового решения. Однако, если у вас есть опыт написания парсеров, вы можете опрокинуть свои собственные. Спецификация для разбора MarkupExtension дается на MSDN.
В качестве обходного пути, вы могли подделать управление, где вы положили связывание на:
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
Это создает TextBlock с связывания как свойство Text. Он даст вам объект привязки со свойствами, установленными в соответствии с выражением привязки.
Затем вы можете применить привязку везде.
Помните, что для вашего более сложного примера с префиксом xmlns вам необходимо включить xmlns:views="..."
в подделку TextBlock
, иначе он не будет знать, что делать с префиксом.
Пример: <TextBlock xmlns:views="..." xmlns="..." Text="{Binding MyProperty}" />
Вы можете посмотреть в [ 'Binding' конструктор, который принимает строку] (http://msdn.microsoft.com/en-us/library/ms597578.aspx) –
Hi @Trustme -I'maDoctor, я расширил другой пример, который мне нужно реализовать. – Darkzaelus
Я никогда раньше не использовал необработанные «привязки», поэтому лучшее, что я лично могу сделать, это просто обратиться к ['Binding'] (http://msdn.microsoft.com/en-us/library/ms617928.aspx), который содержит все необходимые вам свойства - на самом деле это одно и то же обязательство, которое используется в XAML. Я не знаю, можете ли вы как-то передать ему предопределенную строку, или если вам придется сначала разбирать строку (что было бы контрпродуктивным). –