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中运行良好。

Windows 8 XAML Metro应用程序中的基本UserControl类

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支持用户控件。最好的方法是通过"添加新"菜单选项添加新的用户控件。这将为您提供一个可编译的空用户控件。然后,您可以在此模板之上进行构建。