Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定未应用于动态加载的xaml_C#_Wpf_Xaml_Binding_Xamlreader - Fatal编程技术网

C# 绑定未应用于动态加载的xaml

C# 绑定未应用于动态加载的xaml,c#,wpf,xaml,binding,xamlreader,C#,Wpf,Xaml,Binding,Xamlreader,我正在使用XamlReader成功加载一个xaml文件,并创建一个FrameworkElement来使用 我正在加载的xaml中包含绑定表达式,例如: <TextBlock Text="{Binding DataContextTextProperty}" /> 如果我将从XamlReader.Load()返回的FrameworkElement放在WPF窗口中,绑定工作正常 但是,在本例中,我使用了。由于XamlReader.Load()的结果通过VisualBrush直接写入P

我正在使用
XamlReader
成功加载一个xaml文件,并创建一个
FrameworkElement
来使用

我正在加载的xaml中包含绑定表达式,例如:

<TextBlock Text="{Binding DataContextTextProperty}" />

如果我将从
XamlReader.Load()
返回的FrameworkElement放在WPF窗口中,绑定工作正常

但是,在本例中,我使用了。由于
XamlReader.Load()
的结果通过
VisualBrush
直接写入PNG,因此似乎绕过了WPF调用绑定表达式的必要机制

这让我相信,仅仅通过调用
XamlReader.Load()
,实际绑定并没有真正被调用,或者它们没有工作,因为我不知道在将
FrameworkElement
添加到现有的可视化树或其他东西之前,没有可视化树

我可以做些什么来确保调用这些绑定吗

非常感谢。我已经修好了

嗯,请允许我解释一下

我不知道我现在是怎么做到的,但我在MSDN上找到了一篇听起来很有用的文章

在其中,我找到了以下代码示例:

Button b = new Button();
b.BeginInit();
b.Background = Brushes.Blue;
b.Width = b.Height = 200;
b.EndInit();
b.Measure(paperSize);
b.Arrange(new Rect(paperSize));
b.UpdateLayout();
我查看了我在上述问题中提到的Laurent的(同样出色)示例,并定制了
XamlReader
的使用,如下所示:

var element = (FrameworkElement)XamlReader.Load(xamlInput);

element.BeginInit();
element.DataContext = dataContext;

...

element.Measure(renderingSize);
element.Arrange(renderingRectangle);

element.EndInit();
element.UpdateLayout();

我添加了
BeginInit()
EndInit()
UpdateLayout()
(尽管通过消除过程,我相信
UpdateLayout()
是关键),现在动态加载的xaml中的绑定表达式工作正常。万岁

我确实认为视图作为图像可写需要一个布局和渲染过程,而这只有在我们将其加载到可视化树上时才有可能。如果我错了,请纠正我。虽然XamlWriter和FlowDocument的情况有点不同。@AngelWPF我设法解决了这个问题,并在下面给出了答案。它看起来确实是我想要的行为,所以如果我没有犯一些幼稚的错误,我会接受它。我不能告诉你我是多么的放心,让这项工作…不清楚你以前没有做什么。关键是什么?啊,是的,在我兴奋的时候,我忘了说清楚。我现在已经更新了答案。:)