7

例えば:

public class DesignerPatternBrush : Brush
{
    public string Name { get; set; }
}

Brushという新しいプロパティを追加して独自のクラスを定義したいのNameですが、コンパイル エラーが発生します。

エラー CS0534: 'Brushes.DesignerPatternBrush' は、継承された抽象メンバー 'System.Windows.Freezable.CreateInstanceCore()' を実装していません

タイプにNameプロパティを追加するにはどうすればよいですか?Brush

この関連する質問に注意してください: WPF でカスタム ブラシを実装するにはどうすればよいですか? なぜ文字通り継承できないのかという疑問に答えますBrush。しかし、私が望む同じ効果を達成するための他の方法 (添付プロパティを使用するなど) はありますか?

4

4 に答える 4

3

これは、Brush とその祖先から継承されたすべての抽象メソッドを実装する必要があることを意味します。この場合、それはクラスのCreateInstanceCore()メソッドです。Freezable

なぜ名前付きブラシが必要なのですか? ブラシを作成して、ビュー/ウィンドウ/アプリケーションの ResourceDictionary (基本的には名前である特定のキーの下) に保存できます。このソリューションを探している可能性があります。

詳細はこちら: http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/03/creating-and-using-resource-dictionaries-in-wpf-and-silverlight.aspx

于 2012-11-20T16:05:10.070 に答える
2

コンパイルエラーメッセージが示すように、抽象クラスをブラシします->その抽象メンバーを実装する必要があります

Visual Studio にすべての作業を任せるためのショートカットがあります。

Brush クラスを選択し、 Alt + Shift + F10 を押します --> 抽象クラスを入力すると、自動的に実装されます。

public class T : Brush
{

    protected override Freezable CreateInstanceCore()
    {
        throw new NotImplementedException();
    }
}

編集:

ただし、これは Brush クラスでは機能しません。Visual Studio は表示可能なすべてのメソッドを自動実装しますが、Brush クラスは一部のメソッドを内部抽象として定義します

すなわち:

internal abstract int GetChannelCountCore();

Brush は PresentationCore で定義されているため、アセンブリの外部で抽象メソッドをオーバーライドすることはできません... --> クラスから継承することはできません

于 2012-11-20T16:03:44.550 に答える
1

抽象クラスを継承する場合、必要なメンバーがいくつかありますOverride。の下に小さなドロップダウンがありBrushます。カーソルが上にあるときにCTRL+を押すと、それを実装するように求められます。 +の後に押します。実装すると、次のように表示されます。.BrushEnterCTRLSpace

  protected override Freezable CreateInstanceCore()
  {
    throw new NotImplementedException();
  }
于 2012-11-20T16:04:45.563 に答える