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中运行良好.
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元素的原因.
| 归档时间: |
|
| 查看次数: |
2657 次 |
| 最近记录: |