Nei*_*ell 6 c# wpf xaml binding xamlreader
我正在XamlReader成功使用加载xaml文件并创建一个FrameworkElement可以使用的文件.
我正在加载的xaml中包含绑定表达式,例如:
<TextBlock Text="{Binding DataContextTextProperty}" />
Run Code Online (Sandbox Code Playgroud)
如果我将FrameworkElement放回到XamlReader.Load()WPF窗口,那么绑定一切正常.
但是,在这种情况下,我正在使用Laurent Bugnion关于从WPF/XAML创建PNG的优秀文章.由于结果XamlReader.Load()是通过a直接写入PNG VisualBrush,因此似乎绕过了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();
Run Code Online (Sandbox Code Playgroud)
我查看了我在上面的问题中提到的 Laurent 的(再次,出色的)示例,XamlReader并按如下方式自定义了使用:
var element = (FrameworkElement)XamlReader.Load(xamlInput);
element.BeginInit();
element.DataContext = dataContext;
...
element.Measure(renderingSize);
element.Arrange(renderingRectangle);
element.EndInit();
element.UpdateLayout();
Run Code Online (Sandbox Code Playgroud)
我添加了BeginInit(), EndInit()and UpdateLayout()(虽然通过消除过程我认为UpdateLayout()是关键),现在我动态加载的 xaml 中的绑定表达式工作正常。欢呼!
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |