2

Control から継承しているカスタム コントロールに依存関係プロパティ (Foreground) があります。コントロールをロードするときに、ユーザーが依存関係プロパティを設定したかどうか、または値を設定する前にデフォルト値を使用しているかどうかを確認したいと考えています。問題はそれよりも少し複雑です。

コントロールは、ユーザーがプロジェクトに追加するカスタム コントロール ライブラリにあります。彼らがプロジェクトをセットアップしているときに、コントロールのデフォルト値を設定するときに読み取った設定を含む、特定の x:key を使用して app.xaml ファイルに行を追加することができます。ただし、コードまたは xaml で値を設定する場合、このグローバル値で値を設定したくありません。私が話していることを視覚化するのに役立ついくつかのケースを次に示します。

  1. ユーザーは私のライブラリからコントロールを作成し、それを自分のページに配置します。次に、前景を緑に設定します。そのコントロールの前景の値を緑にしたい。

  2. ユーザーは app.xaml に特別な行を追加し、特定の種類のすべてのコントロールの前景を赤にしたいと述べています。その種のすべてのコントロールの前景の値を赤にしたい。

  3. ユーザーは app.xaml に特別な行を追加し、特定の種類のすべてのコントロールの前景を赤にしたいと述べています。次に、1 つのコントロール (xaml 内) の前景の値を黄色に設定します。その種類のすべてのコントロールの前景の値を、別の方法で黄色に指定されているものを除いて、赤にしたいと考えています。

コントロールをロードするときに、依存関係プロパティを読み取って、値が設定されているかどうか、またはスタイルで定義されているデフォルト値であるかどうかを確認したいと考えています。それがデフォルト値の場合、app.xaml ファイルから特別な行を読み取り、前景をその色に設定します。

4

2 に答える 2

5

MSDN ページ ReadLocalValueから、ソリューションを完全に拡張します。

if (ReadLocalValue(FontSizeProperty) == DependencyProperty.UnsetValue)
    // Do your thing...

つまり、値が設定されているかどうかを確認する DependencyProperty.UnsetValue が存在します。

于 2009-10-14T16:00:32.077 に答える
1

私はもう少し調査を行い、答えを見つけたと信じています。コントロールをロード (または更新) するときに、ReadLocalValue (ForegroundProperty) のタイプをチェックします。このタイプが System.Object の場合、xaml で設定されていません。ただし、このタイプが System.Object (System.Windows.Media.Brush など) 以外の場合は、xaml で設定されます。

于 2009-08-13T17:20:15.400 に答える