どのように私は、XAMLで要素ツリーを流下からプロパティ値を停止していますか?
-
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;
}
}
所属していません StackOverflow