Windows 8 XAML Metro应用程序中的基本UserControl类
本文关键字:UserControl XAML Metro 应用程序 Windows | 更新日期: 2023-09-27 18:20:37
我正在使用XAML和;C#。我在Win7中使用WPF开始了这项工作。我创建了一个基类,继承自UserControl,然后尝试将其放入XAML中。
在Windows7中,这非常有效:
<MyType:AnImplementation
...
xmlns:MyType="clr-namespace:MyAppNamespace"
/>
我在Win8中尝试了同样的东西,但不幸的是,我遇到了错误-
<MyType:AnImplementation
...
xmlns:MyType="using:MyAppNamespace"
/>
现在生成以下内容:CompileXaml任务意外失败。然后是null引用异常。
我不是WPF高手,所以我可能做得完全错误——我最近才开始涉足它,但我很难孤立这个问题。这是某种鸡/蛋的问题,还是有不同的方法在Win8 XAML中构建自定义用户控件?
编辑:我认为更清楚可能会有所帮助。我在创建用户控件时没有遇到问题,我在创建自己的基本类型(继承自UserControl
)的用户控件时遇到了问题。例如:
基类,我们将称之为MyBaseType,它继承自UserControl,并具有一些虚拟方法:
public class MyBaseType : UserControl
{
public MyBaseType() : base() {}
}
一个名为ActionTile:的新用户控件
public partial class ActionTile : MyBaseType {}
当我把它放在我的XAML中时:
<myType:MyBaseType
... (other XAML imports)
xmlns:myType="using:MyNamespace"/>
编译器爆炸了。
如果要复制,请创建从UserControl
继承的基类,然后实现从基类继承的控件,并尝试创建该新类型的新UserControl。正如我所说,它在Windows7上的WPF中运行良好。
WinRT XAML元素与WPF XAML元素不同。在WPF中,UserControl类是在命名空间System.Windows.Controls中定义的。而WinRT的UserControl是在Windows.UI.Xaml.Controls.中定义的
在将代码从WPF移动到WinRT时,您必须确保使用正确命名空间中的类。通常,WPF元素在System.Windows命名空间中定义,WinRT XAML元素在Windows.UI.XAML.中定义
Windows.UI.XAML中定义的XAML元素实际上是WinRT对象,使用.Net RCW访问这些对象。这就是为什么您可以在本机C++中使用WinRTXAML元素。
是的,Win 8 XAML支持用户控件。最好的方法是通过"添加新"菜单选项添加新的用户控件。这将为您提供一个可编译的空用户控件。然后,您可以在此模板之上进行构建。