我在用着XamlReader
成功加载 xaml 文件并创建FrameworkElement
跟...共事。
我正在加载的 xaml 中包含绑定表达式,例如:
<TextBlock Text="{Binding DataContextTextProperty}" />
如果我放置 FrameworkElement 我会从XamlReader.Load()
在 WPF 窗口中,绑定一切正常。
但是,在这种情况下我使用Laurent Bugnion 关于从 WPF/XAML 创建 PNG 的优秀文章 http://geekswithblogs.net/lbugnion/archive/2008/10/10/converting-and-customizing-xaml-to-png-with-server-side-wpf.aspx。由于结果XamlReader.Load()
通过 a 直接写入 PNGVisualBrush
,似乎绕过了 WPF 调用绑定表达式的必要机制。
这让我相信实际的绑定并不是通过调用来真正被调用的XamlReader.Load()
,或者它们不起作用,因为我不知道与没有可视化树有关的事情,直到您添加FrameworkElement
到现有的视觉树或其他东西。
我可以做些什么来确保调用这些绑定吗?
提前谢谢了。
我修好了它!!
咳咳,请允许我解释一下……
我现在不知道我是如何做到这一点的,但我在 MSDN 上找到了一篇听起来很有帮助的文章,内容涉及不在对象树中的对象的初始化 http://msdn.microsoft.com/en-us/library/ms788731.aspx.
在其中我找到了以下代码示例:
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()
and UpdateLayout()
(尽管通过排除过程我相信UpdateLayout()
是关键),现在动态加载的 xaml 中的绑定表达式可以正常工作。欢呼!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)