3

多くの異なるコントロールを持つ WPF アプリケーションがあります。バインド先のビュー モデルのプロパティに基づいて、すべての子コントロールを読み取り専用に設定できる必要があります。

私が見るいくつかの課題があります。

  1. 親コントロールを読み取り専用に設定すると、子コントロールも設定されるようにする方法
  2. すべてのコントロールに ReadOnly プロパティがあるわけではありません - 一部の IsReadOnly、一部は IsEnabled しかありません

個々のコントロールごとに適切なプロパティ (ReadOnly、IsReadOnly など) をバインドする必要があるのではなく、一般的なソリューションに関する意見はありますか?

添付プロパティを使用できる方法はありますか? とにかく、たとえば、グリッドにプロパティを設定し、コードで各子コントロールの設定を繰り返して、適切なプロパティを設定することはできますか?

どんなアイデアでも大歓迎です。

デビッド

4

2 に答える 2

3

WPF の暗黙的なスタイルを使用してこれを行うことをお勧めします。スタイルには、ビュー モデルへのバインディングが含まれます。次に例を示します。

<Style TargetType="{x:Type Button}">
    <Setter Property="IsEnabled" Value="{Binding IsNotProcessing}" />
</Style>

このスタイルにはx:Key属性が設定されておらず、属性のx:Typeマークアップ拡張機能が使用TargetTypeされているため、この場合、すべてのボタンに暗黙的に適用されます。

次のスタイルは、すべてのボタン、テキスト ボックス、および使用するすべてのコントロールに適用されるわけではないため、ビュー内の個別のコントロールごとに暗黙的なスタイルを記述する必要があります (ただし、IsEnabledプロパティは で定義されていますFrameworkElement)。

<!-- This implicit style is not applied as the x:Type must be the same type as 
     the targeted control; inheritance does not work here. -->
<Style TargetType="{x:Type FrameworkElement}">
    <Setter Property="IsEnabled" Value="{Binding IsNotProcessing}" />
</Style>

もう 1 つのオプションは、リソース キーを持つ単一のスタイルを作成し、すべてのコントロールからこれを参照することです。これも非常に面倒ですが、設計時にすべてのコントロールを知っていれば、Blend を使用して比較的簡単に実行できます (すべてのコントロールを選択します)。コントロールを選択し、プロパティ ウィンドウを使用してスタイルを適用します)。

これがあなたを助けることを願っています。

于 2013-04-26T17:14:31.063 に答える