这是一个简单的问题,有人肯定知道如何解决。
我有一个完美编译的WPF应用程序。
我决定向ListView添加功能,因此我将ListView类扩展为ListViewEx。
我进入了我的XAML代码并将所有ListView标签更改为ListViewEx。
现在应用程序将无法编译,声称ListViewEx不存在。但它不存在,因为它尚未编译,并且它不会编译,因为XAML认为它不存在!
我可以编译的唯一方法是从XAML中完全删除引用新类的所有标记,编译项目,以便在XAML查找它时存在新类,然后我可以添加标记它会编译好。
这是设计的行为吗?
注意四件事。
问题是XAML设计器正在引用它正在尝试编译的DLL。它期望ListViewEx已经存在,并且因为它尚未编译,它在DLL中不存在。因此,设计器不会像它应该那样在主窗体的部分类上自动生成lstFiles属性,因此,项目将无法编译,因为代码引用了lstFiles。因此它不会编译,因为它正在尝试编译的东西中尚不存在某些东西!这是一个循环依赖,它可以100%重现。
答案 0 :(得分:1)
我发现了问题。
由于Visual Studio没有在自动生成的代码中自动创建lstFiles属性,因为它应该一直在做(当标签只是ListView而不是p:ListViewEx时,我正在做),我尝试手动添加lstFiles属于我的班级,然后它给了我一个更有用的错误信息:
由于'ListViewEx'是在同一个程序集中实现的,因此必须进行设置 x:Name属性而不是Name属性。
因此,解决方案是确保在同一程序集中的自定义命名空间中使用控件时,必须使用“x:Name”而不是“Name”属性声明它。好的。
答案 1 :(得分:0)
我经常使用那个逻辑,并且它有效。我猜测issu来自命名空间。确保在clr-namespace中没有程序集名称,因为该类型在同一程序集中
<Window...
xmlns:custom="clr-namespace:MyCustomListViewNamespace" >
...
<custom:ListViewEx ... />
</Window>
答案 2 :(得分:0)
我曾多次遇到过你所描述的相同问题:循环依赖,其中C#中的类尚未编译,但已在xaml中引用,导致错误并阻止编译。
不幸的是,我找到的唯一解决方案是:
git reset --hard
。现在,您应该能够使用XAML中提供的引用构建解决方案。