XamlParseException было необработанным при добавлении MenuItems
Во время реализации ответа на этот вопрос я наткнулся на XamlParseException
ошибка выполнения.
Я объясню, когда произойдет ошибка, потому что она не имеет никакого смысла для меня. Прежде всего, я использую решение из предыдущего вопроса, чтобы построить два Context Menus
что происходит, когда пользователь щелкает правой кнопкой мыши TreeViewitems
,
РЕДАКТИРОВАТЬ: Для лучшего понимания, я собираюсь опубликовать код именно так, как у меня есть. Я все еще получаю ошибку после переключения моего кода на это.
public static TreeViewItem item1 = new TreeViewItem();
public static TreeViewItem item2 = new TreeViewItem();
ContextMenu item1_CM = new ContextMenu() { Background = Brushes.White, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) };
MenuItem add1 = new MenuItem() { Header = "Add..." }; //Add & Delete MenuItems
MenuItem delete1 = new MenuItem() { Header = "Delete..." };
ContextMenu item2_CM = new ContextMenu() { Background = Brushes.White, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) };
MenuItem add2 = new MenuItem() { Header = "Add..." }; //Add & Delete MenuItems
MenuItem delete2 = new MenuItem() { Header = "Delete..." };
public constructor()
{
Tree = new ObservableCollection<TreeViewItem>();
Tree.Add(item1);
Tree.Add(item2);
//Add MenuItems to TreeView ContextMenus
item1_CM.Items.Add(add1);
item1_CM.Items.Add(delete1);
item1.Items.Add(item1_CM);
item2_CM.Items.Add(add2);
item2_CM.Items.Add(delete2);
item2.Items.Add(item2_CM);
}
Я добавляю два MenuItems
Точно так на двоих TreeViewItems
, Если я компилирую и запускаю с первым реализованным набором, программа работает нормально, но после добавления нового MenuItems
к другому TreeViewItem
, Я понимаю XamlParseException was unhandled
ошибка. Что может быть причиной этого?
Спасибо за вашу помощь.
XAML в соответствии с просьбой
<Window x:Class="CircularButtonPrototype.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:cmp="clr-namespace:System.ComponentModel;assembly=WindowsBase"
Title="Window1" MinHeight="685" MaxHeight="685" Height="685" MinWidth="1044" MaxWidth="1044" Width="1044" AllowsTransparency="False" WindowStartupLocation="CenterScreen" WindowStyle="None" Visibility="Visible">
</Window>
мой TreeView
в XAML
:
<TreeView Name="Tree_One" ItemsSource="{Binding Tree}" HorizontalAlignment="Left" Background="White" SelectedItemChanged="Tree_One_SelectedItemChanged" />
1 ответ
Ваша проблема в этой строке:
item1.Items.Add(item1_CM);
...
item2.Items.Add(item2_CM);
Измените это этим:
item1.ContextMenu = item1_CM;
...
item2.ContextMenu = item2_CM;
Можно ли повторно использовать такой код?
public ObservableCollection<TreeViewItem> Tree { get; set; }
public static TreeViewItem Item = new TreeViewItem {Header = "MainTreeViewItem"};
public static TreeViewItem Item2 = new TreeViewItem {Header = "MainTreeViewItem"};
ContextMenu contextMenu = new ContextMenu { Background = Brushes.White, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) };
MenuItem addItem = new MenuItem() { Header = "Add..." }; //Add & Delete MenuItems
MenuItem deleteItem = new MenuItem() { Header = "Delete..." };
public MainWindow()
{
Tree = new ObservableCollection<TreeViewItem>();
//Add MenuItems to TreeView ContextMenus
contextMenu.Items.Add(addItem);
contextMenu.Items.Add(deleteItem);
Item.ContextMenu = contextMenu;
Item2.ContextMenu = contextMenu;
Tree.Add(Item);
Tree.Add(Item2);
}
ПРИМЕЧАНИЕ: вы будете использовать то же самое ContextMenu
для обоих. Используйте его и попробуйте проверить, какой элемент отправляет событие, чтобы удалить соответствующий;)