Я загружаю элементы на странице динамически (читая содержимое файла XML).Динамический контент загружается в StackPanel
.Каждый элемент содержимого состоит из TextBlock
и одного другого элемента пользовательского интерфейса, поэтому для каждой пары я создаю новый StackPanel
, который затем добавляется к родительскому StackPanel
.Код выглядит следующим образом:
TextBlock header = new TextBlock() {
Text = "Heading 1",
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Top,
Foreground = (SolidColorBrush)Application.Current.Resources["PhoneAccentBrush"],
};
TextBox item = new TextBox() {
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Top,
};
StackPanel sp = new StackPanel();
sp.Children.Add( header );
sp.Children.Add( item );
parentSP.Children.Add( sp );
Я хочу добавить ContextMenu
к этому StackPanel
(sp
, а не parentSP
);в зависимости от некоторых параметров, считываемых из файла, это может быть одно из 2 различных контекстных меню.Я попробовал следующее, но оно не работает:
ContextMenu cm = new ContextMenu();
RoutedEventHandler clickHandler = new RoutedEventHandler( OnContextMenuClicked );
// Add "edit" entry
MenuItem menuItem = new MenuItem() {
Header = "edit",
Tag = "edit",
};
menuItem.Click += clickHandler;
cm.Items.Add( menuItem );
// Add "delete" entry
menuItem = new MenuItem() {
Header = "delete",
Tag = "delete",
};
menuItem.Click += clickHandler;
cm.Items.Add( menuItem );
parentSP.Children.Add( cm );
Как программно добавить контекстное меню в StackPanel
?
Кроме того, есть ли лучший способ решить эту проблему?Может быть, сохраняя 2 разных типа контекстных меню в разделе ресурсов XAML и добавляя их по мере необходимости?Я попытался сделать это, добавив контекстное меню в родительский раздел StackPanel.Resource
, но получил сообщение об ошибке «Элемент свойства не может быть прямым потомком другого элемента свойства»
Заранее спасибо за помощь