不幸的是,这是一个非常初学的问题:
我正在做非常简单的WPF教程,而且我遇到了命名空间问题。 我想根据教程对自定义对象进行简单的分层树视图绑定。我将对象放入自定义命名空间" MyNameSpace"并在XAML中声明了这一点(xmlns:MyTree =" clr-namespace:MyNameSpace")。我相信我不需要指定程序集,因为我只是在我的项目中而没有任何进一步的参考(新的和干净的项目)。
我现在遇到的问题是编译器在
时给出了错误 <HierarchicalDataTemplate DataType="{x:Type MyTree:MenuItemNew}"
带有消息
名称&#34; MenuItemNew&#34;命名空间中不存在&#34; clr-namespace:MyNameSpace&#34;
但确实存在!它甚至可以正确编译和启动程序。但是,由于&#34;无效标记&#34;。
,我再也看不到布局了那么如何告诉XAML接受我的命名空间?或者解决这个问题的最佳方法是什么?
这是XAML:
<Window x:Class="TreeViewTestC.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:MyTree="clr-namespace:MyNameSpace"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="10">
<TreeView Name="trvMenu">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type MyTree:MenuItemNew}" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Title}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
这是我的MainWindow代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Collections.ObjectModel;
using MyNameSpace;
namespace TreeViewTestC
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MenuItemNew root = new MenuItemNew() { Title = "Menu1" };
MenuItemNew childItem1 = new MenuItemNew() { Title = "Child item #1" };
childItem1.Items.Add(new MenuItemNew() { Title = "Child item #1.1" });
childItem1.Items.Add(new MenuItemNew() { Title = "Child item #1.2" });
root.Items.Add(childItem1);
root.Items.Add(new MenuItemNew() { Title = "Child item #2" });
trvMenu.Items.Add(root);
}
}
}
namespace MyNameSpace
{
public class MenuItemNew
{
public MenuItemNew()
{
this.Items = new ObservableCollection<MenuItemNew>();
}
public string Title { get; set; }
public ObservableCollection<MenuItemNew> Items { get; set; }
}
}
答案 0 :(得分:0)
在我看来,您的主应用程序命名空间是TreeViewTestC
而不是 MyNameSpace
。因此,您可能需要告诉编译器您的MyNameSpace
实际上在TreeViewTestC
程序集中,尽管您只有一个项目。请尝试使用此代码:
xmlns:MyTree="clr-namespace:MyNameSpace;assembly=TreeViewTestC"
答案 1 :(得分:0)
好的,我找到了解决方案。该项目是在网络驱动器上。将其移动到本地文件夹可以解决问题...... 男人,真是一团糟。这花了我很多时间,我需要网络驱动器..
更多信息: The name "XYZ" does not exist in the namespace "clr-namespace:ABC"
非常感谢你的帮助