0

カスタム WPF コントロールを作成しています。このコントロールでは、BackgroundProperty のデフォルト値をオーバーライドして、コントロールのすべてのインスタンスの背景が灰色になるようにします。これを実現するために、次の内容の静的コンストラクターをコントロールに用意しました。

static CustomControl() {
    CustomControl.BackgroundProperty.OverrideMetadata(
        typeof(CustomControl), 
        new FrameworkPropertyMetadata(Brushes.Gray)
    );
}

ただし、コントロールをテストするとき、XAML で Background プロパティの値を指定していなくても、背景は透明に設定されたままです。

 <c:CustomControl />

私が間違っていることを誰かが知っていますか?

4

1 に答える 1

2

プロパティのオーバーライドは正しいアプローチです。ただし、コントロールテンプレートは実際にBackgroundプロパティを使用する必要があります。テンプレートは表示されていませんが、次のようなものを含める必要があります。

<Border Background="{TemplateBinding Background}" ...

編集:あなたが実際にカスタムユーザーコントロールを意味しているかもしれないのに、あなたがカスタムコントロールと言うので、あなたの質問は混乱を引き起こしていると思います。どうか明らかにしてください。

于 2013-01-17T12:10:48.587 に答える