Windows 8 XAML Metro App中的基本UserControl类

Joh*_*son 2 c# xaml wpf-controls windows-8 windows-runtime

我正在使用XAML和C#开发Metro应用程序.我在Win7中使用WPF启动了这个.我创建了一个继承自UserControl的基类,然后尝试将其放入我的XAML中.

在Windows 7中,这很有用:

<MyType:AnImplementation
 ...
 xmlns:MyType="clr-namespace:MyAppNamespace"
/>
Run Code Online (Sandbox Code Playgroud)

我在Win8中尝试了同样的事情,但遗憾的是,我收到了错误 -

<MyType:AnImplementation
 ...
 xmlns:MyType="using:MyAppNamespace"
/>
Run Code Online (Sandbox Code Playgroud)

现在产生这个:CompileXaml任务意外失败.然后是空引用异常.

我不是WPF专家,所以我可能会做到这一点完全错误 - 我刚刚开始进入它,但我无法隔离这个问题.这是某种鸡/蛋问题,还是有不同的方法在Win8 XAML中构建自定义用户控件?

编辑:我认为更清楚可能会有所帮助.我在创建用户控件时遇到了麻烦,我在创建属于我自己的基类型的usercontrol时遇到了麻烦UserControl.例如:

作为基类,我们将调用MyBaseType,它继承自UserControl并具有一些虚拟方法:

public class MyBaseType : UserControl
{
    public MyBaseType() : base() {}
}
Run Code Online (Sandbox Code Playgroud)

一个名为ActionTile的新用户控件:

public partial class ActionTile : MyBaseType {}
Run Code Online (Sandbox Code Playgroud)

当我把它放在我的XAML中时:

<myType:MyBaseType
    ... (other XAML imports)
    xmlns:myType="using:MyNamespace"/>
Run Code Online (Sandbox Code Playgroud)

编译器爆炸了.

如果要复制,请创建继承自的基类UserControl,然后实现从基类继承的控件,并尝试创建该新类型的新UserControl.正如我所说,在Windows 7上的WPF中运行良好.

sar*_*esh 7

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元素实际上是.Net RCW的WinRT对象,用于访问这些对象.这就是您可以在本机C++中使用WinRT XAML元素的原因.