6

C# の WPF ツールキット (またはそれぞれ他の WPF クラス) で「ページ」クラスを拡張することは可能ですか? 私がやろうとしたこと:

public class ExtendedPage : Page{
   protected void doStuff(){
      // lots of joy n pleasure
   }
}

public partial class RandomWindow : ExtendedPage{
   private void randomMethod(){
      doStuff(); // causes error
   }
}

私が質問している理由は明らかです。Pag​​e クラス (ExtendedPage) を拡張した後、サブクラス (RandomWindow) はそのベースのメソッドにアクセスできなくなります。これは (少なくとも私の推測では) RandomWindow が部分的であるという状況が原因です。残念ながら、このクラスは WPF (対応する *.xaml へのリンク) によって生成されるため、部分クラスの他の部分を見つけることができません。

この質問は、私が完全なバカのように見える非常に明白な答えにつながる可能性がありますが、どうやら私はそれを理解することができません. 私は C# を使い始めたばかりで、私のプログラミングの原点は Java です。

正確なエラー メッセージは、「'type' の部分宣言では、異なる基底クラスを指定してはなりません」 (CS0263) です。

コメントの 1 つへの応答として: *.xaml での "Page" の宣言は、基本クラスが "Page" (ExtendedPage ではない) である分離コード ファイルを生成するようです。これを変更しても機能しないようです。コンパイラは、タイプ ExtendedPage が見つからないことについて不平を言います。

<Page x:Class="...RandomWindow" ... />
// to
<src:ExtendedPage x:class="...RandomWindow" 
xlmns:src="...ExtendedPage" />
4

2 に答える 2

7

'type' の部分宣言では、異なる基本クラスを指定してはなりません

まあ、それは簡単なことです。おそらく、次のような XAML がどこかにあるでしょう。

<Page x:Class="MyApp.MyNamespace.RandomWindow" ....>

ただし、 a をベースとして暗黙的に指定するPage場合は、次のものが必要です。

<local:ExtendedPage x:Class="MyApp.MyNamespace.RandomWindow"
                    xmlns:local="clr-namespace:MyApp.NSContainingExtendedPage"
                    ...>
于 2012-08-29T09:52:24.113 に答える
0

ページクラス(ExtendedPage)を拡張した後、サブクラス(RandomWindow)はそのベースのメソッドにアクセスできません

これは間違っています。public可能であれば、クラスを拡張すると、基本クラスのすべてのprotectedメンバーにアクセスできるようになります。

パーシャルは、異なるファイル間でのクラスのコードの配布にのみ関連していますが、コンパイル後の実際のプレゼンテーションとは関係ありません。コンパイル後、単一のソリッドタイプになります。

ここに投稿したものは正常に機能するはずです。

于 2012-08-29T09:35:06.413 に答える