12

我在命名从其基本窗口继承的窗口时遇到问题,当我尝试为窗口命名时,出现以下错误。

BaseWindow 类型不能有 Name 属性。值类型和没有默认构造函数的类型可以用作 ResourceDictionary 中的项。

XAML:

<log:BaseWindow 
   x:Class="EtraabMessenger.MainWindow"
   x:Name="main"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:log="clr-namespace:EtraabMessenger.MVVM.View.Controls" 
   xmlns:VMCore="clr-namespace:EtraabMessenger.MVVM.VMCore" 
   VMCore:WindowClosingBehavior.Closing="{Binding DoCloseMainWindowCommand}"
   Height="464" Width="279">

</log:BaseWindow>

编辑:这是我的 BaseWindow 类

public abstract class BaseWindow : Window, INotifyPropertyChanged
{
    protected BaseWindow()
    {
        // Note (Important) : This message should register on all windows
        // TODO : I'm planning to move this registeration to BaseWindow class
        Messenger.Register<bool>(GeneralToken.ClientDisconnected, DisconnectFromServer);
    }

    protected abstract void DisconnectFromServer(bool isDisconnected);
    protected abstract void RegisterTokens();
    protected abstract void UnRegisterTokens();

    ....
    ....
    ....

}

任何建议都会有所帮助。

4

1 回答 1

25

正如错误所述,您的基本窗口显然需要一个公共默认构造函数(一个没有参数的构造函数),它也可能不是抽象的,因为需要创建它的一个实例。

于 2012-07-10T18:36:34.623 回答