我有以下类的层次结构:
abstract MyWindowBase : System.Windows.Window
(即WPF一个)
MyWindow : MyWindowBase
我想在XAML中创建一个类型为MyWindow
的Window作为根元素。我发现只有这样做:
<local:MyWindowBase
x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
local:x="clr-namespace:MyProjectNamespace">
<local:MyWindowBase.Resources>...</local:MyWindowBase.Resources>
...
</local:MyWindowBase>
即。我将我的抽象类型指定为根元素,这看起来很尴尬。
我也尝试过这种明显的方式:
<Window
x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
...
</Window>
并在代码隐藏中定义MyWindow : MyWindowBase
,但它与生成的文件中的类定义冲突,后面写着MyWindow : Window
。
有更好的方法吗? 感谢
答案 0 :(得分:1)
检查this recent post of mine,它解释了这种事情 - 如何从另一个页面派生出一个页面(方法完全相同)。
答案 1 :(得分:0)
没有什么可以阻止你在这里拥有你想要的任何层次结构。根元素是基类型,x:Class
是您当前定义的生成类型。
如果您希望将特定类调用MyWindow
并从MyWindowBase
派生,那么您的第一个示例是正确的:
<local:MyWindowBase
x:Class="MyWindow"
local:x="clr-namespace:MyProjectNamespace">
如果您希望特定类来自MyWindow
派生,那么您需要一个不同的类名:
<local:MyWindow
x:Class="MainWindow"
local:x="clr-namespace:MyProjectNamespace">
答案 2 :(得分:0)
这是正常用法。实际上,您使用Visual Studio或Blend创建的默认类来执行相同的操作。
请注意,您继承自Window,因此实际的类是 MainWindow ,但xaml使用基类 Window
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
的Xaml
<Window
x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
...
</Window>