1

私はSystem.Windows.Documents名前空間内のクラスを操作しており、これらのプロパティが特定のクラスに存在するかどうかに応じて、特定の依存関係プロパティの値を条件付きで設定する汎用コードを記述しようとしています。

たとえば、次のメソッドPaddingは、渡された のプロパティに任意の値を割り当てFrameworkContentElementます。

void SetElementPadding(FrameworkContentElement element)
{
    element.SetValue(Block.PaddingProperty, new Thickness(155d));
}

ただし、すべての具体的な実装がプロパティをFrameworkContentElement持っているわけではありません (ありますが、ありません)。そのため、このプロパティを実装する型ではプロパティの割り当てが成功し、そうでない型では暗黙のうちに無視されることを期待します。PaddingParagraphSpan

FrameworkContentElementしかし、プロパティを実装するかどうかに関係なく、のすべての派生物のインスタンスに対して、上記のプロパティの割り当てが成功するようですPadding。割り当てられた値を常に読み取ることができたので、この仮定を行います。

プロパティ値を割り当てる方法に何らかの欠陥があると思います。特定の依存関係プロパティの割り当てが、そのプロパティを実装しないクラスによって無視されるようにするにはどうすればよいですか?

アドバイスありがとうございます。

ティム

4

1 に答える 1

1

Block から派生したすべてのクラスには、Padding プロパティがあります。次の変更を使用できます。

void SetElementPadding(FrameworkContentElement element)
{
    var block = element as Block;
    if (block == null) return;

    block.Padding = new Thickness(155d);
}

この変更がなくても、必要なのは Padding をサポートしていないクラスによって無視されることだけなので、すべてが機能します。これはまさに何が起こるかです。Padding 依存関係プロパティをサポートしていないインスタンスでその値を読み取ることができるという事実は、おそらく設計によるものですが、気にする必要はありません。ブロックとデリバティブは値を尊重し、他のすべてはそれを無視します。

于 2010-04-23T09:49:28.093 に答える