Wie verhindere ich, Eigenschaftswerte von fließenden nach dem Element Baum in XAML?

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

  •  20-09-2019
  •  | 
  •  

Frage

Lassen Sie uns sagen, dass ich eine gewisse Kontrolle haben, die deaktiviert wurde. Es enthält eine Reihe von Elementen, aber ich möchte eine dieser untergeordneten Elemente aktiviert bleiben.

So etwas wie folgt aus:

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

So in diesem Beispiel der Schaltfläche IsEnabled = „True“ Einstellung wird von seinen Eltern außer Kraft gesetzt. Gibt es eine Möglichkeit, dies zu stoppen passiert?

Dies scheint eine seltsame Sache zu tun, aber ich habe eine Situation, wo, wann eine Steuerung deaktiviert ist und ein Benutzer mit der Maus nach unten auf sich, ich will noch ein Ereignis ausgelöst werden.

Ich lese in WPF Unleashed dass Verpackung etwas in einem Frame-Steuerelement „..isolates den Inhalt aus dem Rest der UI [und] Eigenschaften, die normalerweise auf der Elementstruktur Anschlag vererbt werden würden, wenn sie den Rahmen erreichen“, aber im Beispiel die Button-Verpackung oben in einem Frame nicht funktioniert.

Bin ich auf dem falschen Weg hier?

War es hilfreich?

Lösung

, die nicht Erbe ist, es Komposition

enthaltende Steuer deaktiviert ist, damit alle seine enthaltenen Steuerelemente sind deaktiviert

ermöglichen, den Behälter und die Kontrolle, dass Sie möchten, und deaktivieren Sie die anderen Bedienelemente

Andere Tipps

Wenn Sie die Taste erben können (oder eine Kontrolle, die Sie benötigen), können Sie die CoerceValue ersetzen dieses Verhalten (in der Tat zu vermeiden, denke ich IsEnabled sollte wie IsChecked arbeiten, ein Bool ist ?, wobei null Mittel, um die Eltern verwenden Wert sollte jeder bestimmte Wert gehalten werden ... aber wie das ist nicht das Verhalten, mit dieser Lösung wird das Problem) lösen:

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;
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top