3

無効になっているコントロールがあるとしましょう。たくさんの要素が含まれていますが、それらの子要素の 1 つを有効のままにしておきたいです。

このようなもの:

<ContentControl IsEnabled="False">
    <Border>
        <Button Content="Button" IsEnabled="True"/>
    </Border>
</ContentControl>

したがって、この例では、Button の IsEnabled="True" 設定がその親によってオーバーライドされます。これが起こらないようにする方法はありますか?

これは奇妙なことのように思えますが、コントロールが無効になっているときにユーザーがマウスを置いたときに、イベントをトリガーしたいという状況があります。

私は WPF Unleashed で、何かをフレーム コントロールにラップすることを読みました。上記の例では、Frame は機能しません。

私はここで間違った道を進んでいますか?

4

2 に答える 2

4

ボタン (または必要な任意のコントロール) を継承できる場合は、CoerceValue を置き換えてこの動作を回避できます (実際、IsEnabled は IsChecked のように機能し、bool である必要があると思います。ここで、null は親の値を使用することを意味します。特定の値を保持する必要があります...しかし、それは動作ではないため、このソリューションを使用すると問題が解決します):

public sealed class InheritedButton:
  Button
{
  static InheritedButton()
  {
    InheritedButton.IsEnabledProperty.OverrideMetadata
    (
      typeof(InheritedButton),
      new FrameworkPropertyMetadata
      (
        true,
        null,
        _CoerceIsEnabled
      )
    );
  }
  private static object _CoerceIsEnabled(DependencyObject source, object value)
  {
    return value;
  }
}
于 2013-05-29T14:03:16.517 に答える
4

それは継承ではなく合成です

含まれているコントロールが無効になっているため、含まれているすべてのコントロールが無効になっています

コンテナと必要なコントロールを有効にし、他のコントロールを無効にします

于 2010-03-15T19:19:12.520 に答える