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 に答える