どのように私は、XAMLで要素ツリーを流下からプロパティ値を停止していますか?

StackOverflow https://stackoverflow.com/questions/2449638

  •  20-09-2019
  •  | 
  •  

質問

のは、私は無効にされたいくつかのコントロールを持っているとしましょう。これは、要素の束が含まれていますが、私はそれらの子要素のいずれかが有効になったままにしたい。

このような何かます:

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

したがって、この例では、ボタンのIsEnabled =「True」に設定がその親によって上書きされます。起きてからこれを停止する方法はありますか?

これはやって奇妙なことのように思えるが、私はコントロールが無効になり、ユーザーはそれを下にマウスを置いたとき、私はまだイベントがトリガされるようにしたい、事態を持ってます。

私は、Frameコントロールで何かをラップすると、「UIの残りの部分からコンテンツを..isolates [と]彼らはフレームに到達したとき、通常は要素ツリーの停止をダウン継承されるだろう性質」という解き放たWPFで読みますが、フレームにおける上記の例ではボタンを包む動作しません。

私はここで間違ったトラックにアム?

役に立ちましたか?

解決

それは相続ではありません、それは構図だ。

を含むコントロールが含まれているすべてのコントロールは、このように、無効に無効にされている

あなたが望むコンテナとコントロールを可能にし、他のコントロールを無効にする

他のヒント

あなたはボタン(またはあなたが必要とするすべてのコントロール)を継承することができた場合は、

は、この動作を回避するためにCoerceValueを置き換えることができます(実際には、私はでIsEnabledがnullの手段が親を使用ブール?,こと、にisCheckedのように動作するはずだと思います値、特定の値が保持されなければならない...しかし、それは動作しませんように、このソリューションを使用して)問題を解決します。

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;
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top