【问题标题】:"The tag 'MenuItem' does not exist in XML namespace 'clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit'" error“XML 命名空间 'clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit' 中不存在标记 'MenuItem'”错误
【发布时间】:2011-05-29 16:49:47
【问题描述】:

我在尝试在新机器上构建 Silverlight 应用程序时遇到错误。 (Silverlight 4,Visual Studio 2010)这个应用程序在其他四台机器上编译没有错误。

错误是:

the tag 'MenuItem' does not exist in XML namespace 'clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit'. 

这些引用似乎是指向正确程序集的指针。有没有其他人遇到过这个问题?

【问题讨论】:

  • 在新机器上安装 Silverlight Toolkit。
  • 这发生在 Silverlight 5 和最新的 Silverlight 工具包中。引用了所有三个程序集(SYStem.Windows.Controls、System.Windows.Controls.Input.Toolkit 和 System.Windows.Controls.Toolkit)。 MenuItem 也会出现在 Intellisense 中。
  • 还有一个关于 Connect with another Toolkit 控件的类似问题。 connect.microsoft.com/VisualStudio/feedback/details/664106/…
  • 我尝试在 Silverlight 5 下重建 Silverlight 控件示例并得到相同的警告,但示例仍然有效。

标签: xaml silverlight-4.0 silverlight-toolkit silverlight-5.0


【解决方案1】:

看起来您在该机器上缺少Silverlight Toolkit,但它已安装在其他四台机器上。

【讨论】:

  • Silverlight 工具包似乎已安装。通过 Silverlight .DLL 运行,显示了对 MenuItem 的引用。此外,应用程序的另一部分正在使用 MenuItem,但使用 C# 代码创建它。只有在 XAML 中引用 MenuItem 时才会发生此编译错误。
【解决方案2】:

可能出现此问题的另一个原因是缺少对使用 Toolkit 控件部分所需的所有“三个”程序集的引用。

如果尝试使用 Toolkit 输入(并且还可能假设主题),请确保您参考了以下程序集。

System.Windows.Controls
System.Windows.Controls.Toolkit
System.Windows.Controls.Input.Toolkit

这解决了我遇到的与错误有关的问题。

【讨论】:

  • 您需要:Silverlight SDK 客户端库中的 System.Windows.Controls、Silverlight 工具包中的 System.Windows.Controls.Input.Toolkit 和 Silverlight 工具包中的 System.Windows.Controls.Toolkit。
  • 谢谢,这解决了我的问题。我没有引用System.Windows.Controls DLL;当我添加该引用时,它修复了神秘错误。
【解决方案3】:

http://marktinderholt.wordpress.com/2011/07/12/silverlight-toolkit-for-silverlight-5-beta

它是 SL5 中重新编译的工具包,只需引用它们就可以了

【讨论】:

    【解决方案4】:

    您始终可以在代码中创建上下文菜单。

    public LedgerEntryControl()
    {
        InitializeComponent();
    
        ContextMenu contextMenu = new ContextMenu();
        MenuItem voidMenuItem = new MenuItem() { Header = "Void" };
        voidMenuItem.SetBinding(MenuItem.CommandProperty, new Binding("Void"));
        contextMenu.Items.Add(voidMenuItem);
        ContextMenuService.SetContextMenu(this, contextMenu);
    }
    

    【讨论】:

      【解决方案5】:

      出于某种原因,NuGet 包管理器中的 SilverLight 工具包适用于 SL4,即使项目设置为 SL5。您可以直接从 CodePlex 中download the SL5 version。请注意,日期是 2011 年 12 月,而不是像 SL4 版本那样 2011 年 2 月。

      如果由于某种原因 MSI 没有安装(这发生在我身上),您可以使用 7-zip 提取 MSI 中包含的文件。我所要做的就是从提取的文件中手动添加对System.Windows.Controls.Input.Toolkit.dll 的引用,我的 SL5 项目现在可以使用其 NumericUpDown 控件成功编译。令人高兴的是,我的程序现在可以在 Release 和 Debug 模式下编译。

      另外补充一点,对于那些尚未这样做的人,您可能需要在 XAML 中引用正确的工具包。我使用了以下内容:

      <sdk:Page xmlns:input="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" ... >
      

      请注意,第一部分,即input,是需要在 XAML 中输入才能使用控件的内容:

      <input:NumericUpDown x:Name="myControl" ... />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        相关资源
        最近更新 更多