Я динамически строю свой файл данных с помощью XamlReader.Parse (string). Проблема в том, что я не могу помещать какие-либо события в какие-либо элементы управления, которые я создаю с помощью XamlReader. После нескольких исследований в Интернете я узнал, что это известное ограничение XamlReader.Использование событий/команд с XamlReader
Я не очень много знаю о командах в WPF, но могу ли я как-то использовать их для получения того же результата? Если да, то как? Если нет, я могу обработать событие в моем коде позади элемента управления, созданного с помощью Xaml Reader?
Ниже приведен пример создаваемого набора данных. У меня есть обработчик события MenuItem_Click, определенный в кодовом коде окна, который будет размещать этот файл данных.
При попытке запустить его возникла следующая ошибка: 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. Есть идеи? –
Я думаю, что я понял, как получить DependencyObject из DataTemplate ... Я использую DataTemplate.LoadContent(). Теперь проблема заключается в том, что независимо от того, что MenuItem никогда не обнаружено. Я знаю, что контекстное меню не входит в ту же VisualTree, что и остальные элементы управления, верно ли это для LogicalTree? –