我使用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