C#UWP页面无法查看用户控件
我相信项目元数据本身不知何故被破坏了。我可以创建新页面和新用户控件。我可以在XAML中添加它们,如下所示(为了简洁起见,大部分生成的代码都被省略了)这将编译:C#UWP页面无法查看用户控件,c#,visual-studio,xaml,uwp,azure-devops,C#,Visual Studio,Xaml,Uwp,Azure Devops,我相信项目元数据本身不知何故被破坏了。我可以创建新页面和新用户控件。我可以在XAML中添加它们,如下所示(为了简洁起见,大部分生成的代码都被省略了)这将编译: <Page x:Class="MyApp.Pages.MyPage" … xmlns:myControls="using:MyApp.Models"> <Grid> <myControls:MyControl Name="MyControlName">&
<Page
x:Class="MyApp.Pages.MyPage"
…
xmlns:myControls="using:MyApp.Models">
<Grid>
<myControls:MyControl Name="MyControlName"></myControls:MyControl>
</Grid>
</Page>
然后是用户控件:
<UserControl
x:Class="MyApp.Models.MyControl"
…>
<Grid>
</Grid>
</UserControl>
只要我尝试在页面的C#文件中添加对该用户控件的引用,例如:
public sealed partial class MyPage : Page
{
public MyPage()
{
this.InitializeComponent();
this.MyControlName.Width = 10; // This line breaks it.
}
}
我收到一个编译器错误,指出“'MyPage'不包含'MyControlName'的定义,并且没有扩展方法…”
对于我在项目中任意位置创建的任意命名用户控件,以及我在项目中任意位置创建的任意命名页面,都是如此。项目本身似乎不再能够使页面的CS文件“查看”页面上的用户控件。但是,其他非用户控件(如文本框
)仍然可以正常工作
我知道引用都是正确的,因为当从C#文件中删除这一行时,项目就会编译并运行。只有XAML一方可以编译。另外,请注意,无论我正在访问控件的哪个属性或方法,或者甚至当我将控件设置为新值时(如this.MyControlName=new MyControl();
),此错误都会持续存在。页面无法在C#文件中找到该名称控件的定义,即使XAML端可以找到该控件的定义。控件的UI甚至可以在设计视图的页面上正确显示
如果我试图解决这个问题,例如在MyPage.cs文件上显式声明MyControl MyControlName{get;set;}
,它将生成并运行(即使它不应该这样做,因为这是对MyPage
类上属性的重复声明)。但是,尝试与应用程序中其他位置的UI交互会导致以下错误:
“此.k\u BackingField为null
”
我的研究表明,这是一个通常与序列化相关的错误。我从未明确使用序列化。我认为序列化是在从XAML生成xxx.g.I.cs
文件的过程中使用的,所以可能是项目中的一个错误,与它如何管理生成这些文件有关
实际项目是使用VisualStudioTeamServices(VSTS)进行版本控制的。在此问题发生之前回滚到变更集(编译并运行良好的变更集)并不能解决问题
我甚至在另一台PC上使用Visual Studio,映射项目(以前从未在该PC上出现过),并在发布之前获得以前的版本。这个问题仍然存在
似乎项目本身和/或其元数据或生成的文件可能已被损坏、删除或损坏。不知何故,这种损害现在似乎延伸到VST中的变更集,这些变更集在该问题发生之前已签入并完全正常工作
最后要注意的是,当我在Visual Studio中打开项目时,我的电脑确实崩溃了(因为需要硬重置),并且项目中的一些文件(.cs和.xaml)当时是打开的。我可以看出这可能会损坏文件,但我看不出这似乎是如何在崩溃之前追溯性地损坏了功能齐全的变更集的
该项目包括几个月的开发和VST的广泛历史。它完全无法使用(因为应用程序的核心功能都依赖于用户控件)。我能想到的唯一解决方案是在解决方案中创建另一个项目,然后将代码从文件复制并粘贴到该项目中的新文件中。但是,如果可能的话,我仍然希望修复现有的项目,以便之前的数百个变更集仍然可用。如果您有任何关于如何解决此问题(甚至从何处开始查找问题)的想法,我们将不胜感激 嗯,这似乎很奇怪。关于另一台计算机上的映射:如果尚未尝试,请尝试以下操作:使用新名称创建新解决方案,仅复制.cs和.xaml.cs文件(我的意思是,排除与损坏的解决方案连接的任何配置文件)。最有可能的是,在从VST直接克隆时,也克隆了一些以前损坏的配置文件。您的项目repo中被忽略的文件(即gitignore)如何,可能是其中一个导致了问题?我已经解决了。显然,这是两个问题同时出现。曾经的问题是.cs文件没有看到UserControl。通过将XAML声明中的
Name
更改为x:Name
,它起了作用(我在尝试建议@Muzib时发现了这一点。至于另一个“BackingField”问题…我修复了我的Visual Studio安装,问题消失了。不知道发生了什么,但很高兴它看起来又正常工作了!谢谢你的建议!
public sealed partial class MyControl : UserControl
{
public MyControl()
{
this.InitializeComponent();
}
}
public sealed partial class MyPage : Page
{
public MyPage()
{
this.InitializeComponent();
this.MyControlName.Width = 10; // This line breaks it.
}
}