2013-08-06 37 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

相关问题