我使用XamlReader.Parse(字符串)动态构建数据模板。我遇到的问题是,我无法将任何事件放在使用XamlReader创建的任何控件上。在网上做了一些研究之后,我了解到这是XamlReader的一个已知限制。通过XamlReader使用事件/命令
我不知道很多关于WPF中的命令,但我可以用它们来获得相同的结果吗?如果是这样如何?如果没有,我可以通过使用Xaml Reader创建的控件来处理代码中的事件吗?
下面是我创建的datatemplate的一个示例。我有一个MenuItem_Click事件处理程序,它在将要托管这个数据模板的Window的代码隐藏中定义。
尝试运行时出现以下错误:System.Windows.Markup.XamlParseException未处理:无法从文本“MenuItem_Click”创建“单击”。
DataTemplate result = null;
StringBuilder sb = new StringBuilder();
sb.Append(@"<DataTemplate
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<Grid Width=""Auto"" Height=""Auto"">
<TextBlock Text=""Hello"">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem
Header=""World""
Click=""MenuItem_Click""></MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</Grid>
</DataTemplate>");
result = XamlReader.Parse(sb.ToString()) as DataTemplate;
我似乎无法得到该代码段进行编译。 FindLogicalNode接受一个DependencyObject,因为它是第一个参数,我无法弄清楚如何将一个DataTemplate转换为一个DependencyObject。有任何想法吗? – 2010-08-20 17:04:05
我想我想出了如何从DataTemplate中获取DependencyObject ...我使用DataTemplate.LoadContent()。现在的问题是,无论MenuItem是什么都找不到。我知道上下文菜单并不包含在与其他控件相同的VisualTree中,对于LogicalTree也是如此? – 2010-08-20 17:38:58