我正在成功使用XamlReader
加载xaml文件并创建一个FrameworkElement
来使用。
我正在加载的xaml中包含绑定表达式,例如:
<TextBlock Text="{Binding DataContextTextProperty}" />
如果我放置FrameworkElement,我从XamlReader.Load()
返回到WPF窗口,绑定一切正常。
但是,在这种情况下,我正在使用Laurent Bugnion's excellent article on creating PNGs from WPF/XAML。由于XamlReader.Load()
的结果是通过VisualBrush
直接写入PNG的,因此似乎绕过了WPF调用绑定表达式的必要机制。
这让我相信实际的绑定并不是真的只是通过调用XamlReader.Load()
来调用,或者它们因为我不知道的事情而不能正常工作可视树,直到您将FrameworkElement
添加到现有的可视树或其他内容。
我能做些什么来确保调用这些绑定吗?
非常感谢提前。
答案 0 :(得分:4)
我固定它!!
嗯,请允许我解释......我现在不知道我是怎么做到的,但我在MSDN上发现了一篇关于Initialization for Objects Not in an Object Tree的有用的文章。
在其中我找到了以下代码示例:
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工作正常。乌拉!