Windows 8 XAML Metro App中的基本UserControl类

时间:2012-01-18 21:46:18

标签: c# xaml wpf-controls windows-8 windows-runtime

我正在使用XAML& amp; C#。我在Win7中使用WPF启动了这个。我创建了一个基类,继承自UserControl,然后尝试将它放在我的XAML中。

在Windows 7中,这很有效:

<MyType:AnImplementation
 ...
 xmlns:MyType="clr-namespace:MyAppNamespace"
/>

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

<MyType:AnImplementation
 ...
 xmlns:MyType="using:MyAppNamespace"
/>

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

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

编辑:我认为更清楚可能会有所帮助。我在创建用户控件时遇到了麻烦,我在创建属于我自己的基类型的usercontrol时遇到了麻烦,该类控件继承自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。正如我所说,在Windows 7上的WPF中工作正常。

2 个答案:

答案 0 :(得分: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元素的原因。

答案 1 :(得分:2)

是的,Win 8 XAML支持用户控件。解决此问题的最佳方法是通过“添加新”菜单选项添加新的用户控件。这应该为您提供一个编译的空用户控件。然后,您可以在此模板的基础上构建。