题
我有在WPF基类的问题。我尽量让基类的一些基本元素,使其他窗口可以继承这些组件。但这一切我有,当我继承基类是只空的窗口,如果没有这些元素。为了更好地理解,我把我的代码在这里:
using XSoftArt.WPFengine;
namespace XSoftArt
{
public class WindowBase : Window
{
public WindowBase()
{
}
}
<强> Windows的规范,whitch继承WindowBase:强>
namespace XSoftArt.WPFengine
{
public partial class NewAbility : WindowBase
{
public NewAbility()
{
base.ChildForm = this; InitializeComponent();
}
}
}
或者也许有人可以把一个工作示例或链接在WPF实现的基类? 感谢
解决方案
我不认为我会永远使用继承在WPF你想使用它的方式。
我会尝试,并采取刺伤在回答你的问题。如果我正确理解你,你想是这样的:
- 您正在创建一个既有XAML文件和代码隐藏的窗口。
- 您要加入“基本元素”的XAML为你的窗口......我不知道你所说的“基本元素”的意思,但我会假设你的意思是你要添加的UI元素窗口中。
- 您正在创建的另一个窗口,“导出”从代码隐藏你的第一个窗口,问题是,你没有看到从你的“基地”窗口上的UI元素。 醇>
如果这是你想要使用WPF实现的目标,我个人建议反对,只是因为我个人不继承的粉丝,并亲眼看到让继承失控的危险。
什么你可以尝试,而不是为你的组织“基地” UI元素融入到WPF用户控件。 本教程也许能够引导你在正确的方向。祝你好运!
其他提示
我不认为你真正需要做的,你在做什么,请但这是可行的。我想,你只是忘记调用基类的构造函数。
using XSoftArt.WPFengine;
namespace XSoftArt
{
public class WindowBase : Window
{
//call base ctor
public WindowBase() : base()
{
}
}
}
您将需要从你的继承类也这么做:
namespace XSoftArt.WPFengine
{
public partial class NewAbility : WindowBase
{
public NewAbility() : base()
{
base.ChildForm = this; InitializeComponent();
}
}
}
如果你也有一个XAML定义的视图,你需要确保你的观点的是的WindowBase。要做到这一点,更改此:
<Window x:Class="MyApp.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
...
>
<Grid>
</Grid>
</Window>
要这样:
<local:WindowBase x:Class="MyApp.MyView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XSoftArt;"
...
>
<Grid>
</Grid>
</local:WindowBase>
如果你看一下这个类在反射器,你会看到,构造函数调用窗口类的自己的“初始化()”方法,它集运动中的很多事情。具体来说它似乎本身挂钩到分派器,这是所有UI事件的工作队列。
在特别是,要确保基类的InitializeComponent()方法被调用 - 这是一个创建您在XAML定义的控制功能
将派生类,如果你要继承这两个控件和行为,但考虑到使用的模板用于管理一组共同的控制的更灵活的方式。
不隶属于 StackOverflow