1

我对 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 中放置一个工作示例或与已实现的基类链接?谢谢

4

3 回答 3

3

我不认为你真的需要做你正在做的事情,但这是可行的。我认为您只是忘记调用基类构造函数。

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>

如果你在 Reflector 中查看这个类,你会看到构造函数调用了 Window 类自己的“Initialize()”方法,这使得很多东西都在运动。具体来说,它似乎与 Dispatcher 挂钩,这是所有 UI 事件的工作队列。

于 2009-10-29T17:02:06.753 回答
1

特别是,您要确保调用基类的 InitializeComponent() 方法 - 这是创建您在 XAML 中定义的控件的函数。

如果您想继承控件和行为,则创建派生类非常好,但考虑使用模板以更灵活的方式管理一组通用控件。

于 2009-10-29T17:08:34.417 回答
0

我认为我不会像您尝试使用它那样在 WPF 中使用继承。

我会尽力回答你的问题。如果我对您的理解正确,那么您正在尝试这样的事情:

  1. 您正在创建一个同时具有 XAML 文件和代码隐藏的窗口。
  2. 您正在为您的窗口向 XAML 添加“基本元素”......我不确定您所说的“基本元素”是什么意思,但我假设您的意思是您正在向窗口添加 UI 元素。
  3. 您正在创建另一个从代码隐藏中的第一个窗口“派生”的窗口,问题是您没有从“基本”窗口中看到其上的 UI 元素。

如果那是你想用 WPF 实现的,我个人建议不要这样做,因为我个人不喜欢继承,并且亲眼目睹了让继承失控的危险。

您可以尝试将“基本”UI 元素组织到 WPF 用户控件中。本教程可能会引导您朝着正确的方向前进。祝你好运!

于 2009-10-29T16:48:43.497 回答