3

私はユーザーコントロールを設計していて、その動作を構成可能にしたいのですが、作成時に一度だけです。特定のウィンドウが特定の構成でそれを使用することを事前に知っているので、後で適応させる必要はありません。

この単純なマークアップを考えてみましょう。

<MyControl SomeProperty="True" SomeOtherProperty="12345" />

SomePropertySomeOtherPropertyは、コードビハインドで宣言されているDependencyPropertiesです。

InitializeComponent()問題は次のとおりです。コントロールは、が呼び出される前に、コンストラクターで入力データの前処理を行います。SomePropertyその段階では、ユーザーにアクセスしたり、ユーザーが定義したりすることはできませんSomeOtherProperty。ユーザーは引き続きデフォルト値を使用しています。

その後、これらのプロパティがXAMLで設定されている場合、コンストラクターの後に値が割り当てられます。を導入し、PropertyChangedCallback各プロパティが更新された後にもう一度計算を実行することで、それらに対応できます。

値を1回渡すだけで、コントロールの初期化ロジックも1回だけ実行されるようにしたいので、これは最適ではありません。すでに正しい設定になっています。sを使用したソリューションでPropertyChangedCallbackは、このコントロールをより複雑にする必要があります。つまり、コントロールの存続期間中、これらの依存関係プロパティへの変更に対応する必要があります。これは私が必要とする以上のものです-私のプロパティが読み取り専用であり、コントロールの作成時に一度だけ設定されていれば十分です。

XAMLマークアップをクリーンに保ちながら、どうすればそれを実行できますか?

4

1 に答える 1

2

WPF がプロパティを設定するには、コントロールを構築する必要があります。プロパティが設定されるまで構築を「遅らせる」方法はありません。

初期化ロジックをコンストラクターに配置する代わりに、 Loaded イベントをサブスクライブしてそこで初期化するなど、別の場所に配置してみることをお勧めします。これは、プロパティが設定された後に発生します。

于 2012-07-30T16:00:42.073 に答える