c# - Windows 8 XAML Metro App 中的基本 UserControl 类

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

我正在使用 XAML 和 C# 开发 Metro 应用程序。我在 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)的用户控件时遇到了问题。例如:

一个基类,我们称之为 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 中运行良好。

最佳答案

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 对象,用于访问这些对象。这就是您可以在 native C++ 中使用 WinRT XAML 元素的原因。

关于c# - Windows 8 XAML Metro App 中的基本 UserControl 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8917914/

相关文章:

c# - 将 Func 委托(delegate)为属性

c# - 测试 WCF 服务的最佳方法是什么?

c# - 修改2字节10位

c# - 如何将 xaml 属性绑定(bind)到另一个类中的静态变量?

android - 在 Xamarin Forms 中处理不同设备尺寸的缩放

c# - 将 GridView 选定项设置为无

c# - 在 C#/.NET 中处理基督之前日期的(最佳)方法是什么?

c# - 如何为面板中的项目添加自定义行为?

wpf - WPF 中的 DataTemplate 和 DataContext 有什么区别?

wpf - 设置 WPF TabControl 非事件选项卡的背景颜色