2013-08-06 41 views
1

在執行this question的答案時,我遇到了XamlParseException運行時錯誤。XamlParseException在添加MenuItems時未處理

我會解釋什麼時候發生錯誤,因爲它對我沒有任何意義。首先,我使用上一個問題的解決方案構建兩個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> 

TreeViewXAML

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

您可以提交您的XAML代碼嗎?看起來好像你有不規則的東西。 – Sonhja

+0

當然,只是最上面的部分,直到「標題」?另外,請注意,自從上一個問題以來,我沒有碰到我的XAML。 –

+0

但我只能看到背後的代碼。你在哪裏發佈了你的XAML? – Sonhja

回答

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。使用它並嘗試檢查哪個項目是發送活動的項目以刪除適當的項目;)

+0

沒關係,它的工作! =)非常感謝你! –

+0

我應該問一個關於這個問題的新問題,但是如果兩個'TreeViewItems'共享相同的'ContextMenu',我將如何實現爲這些'MenuItems'添加點擊事件? –

+0

我還沒有明確地嘗試過,但我認爲你可以檢查哪個元素是發件人,然後採取後續行動。但我認爲爲每一個創建不同的ContextMenu會更容易。 – Sonhja

相關問題