1

この質問からの回答を実装しているときに、XamlParseException実行時エラーに遭遇しました。

私には意味が分からないので、エラーが発生したときに説明します。まず、前の質問の解決策を使用してContext Menus、ユーザーが を右クリックしたときに表示される2 つを作成します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このように 2 つを正確に 2 つ追加しTreeViewItemsます。最初のセットを実装してコンパイルして実行すると、プログラムは正常に実行されますが、 newMenuItemsを他のに追加する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>

TreeViewXAML:

<TreeView Name="Tree_One" ItemsSource="{Binding Tree}" HorizontalAlignment="Left" Background="White" SelectedItemChanged="Tree_One_SelectedItemChanged" />
4

1 に答える 1

0

あなたの問題はこの行にあります:

 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両方に同じものを使用します。それを使用して、適切なアイテムを削除するためにイベントを送信するアイテムを確認してください;)

于 2013-08-06T14:50:16.210 に答える