Я не думаю, что вам действительно нужно делать то, что вы делаете, , но это выполнимо. Я думаю, вы просто забыли вызвать конструктор базового класса.
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, то увидите, что конструктор вызывает собственный метод Initialize () класса Window, который приводит в движение множество вещей. В частности, он, похоже, подключается к Dispatcher, который является рабочей очередью для всех событий пользовательского интерфейса.