我有在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你想使用它的方式。

我会尝试,并采取刺伤在回答你的问题。如果我正确理解你,你想是这样的:

  1. 您正在创建一个既有XAML文件和代码隐藏的窗口。
  2. 您要加入“基本元素”的XAML为你的窗口......我不知道你所说的“基本元素”的意思,但我会假设你的意思是你要添加的UI元素窗口中。
  3. 您正在创建的另一个窗口,“导出”从代码隐藏你的第一个窗口,问题是,你没有看到从你的“基地”窗口上的UI元素。
  4. 如果这是你想要使用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定义的控制功能

将派生类,如果你要继承这两个控件和行为,但考虑到使用的模板用于管理一组共同的控制的更灵活的方式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top