Come faccio a smettere i valori delle proprietà di fluire verso il basso l'albero elemento in XAML?

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

  •  20-09-2019
  •  | 
  •  

Domanda

Diciamo che ho un po 'di controllo che è stato disattivato. Esso contiene una serie di elementi, ma voglio uno di quegli elementi secondari a rimanere abilitati.

Qualcosa di simile a questo:

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

Quindi in questo esempio, IsEnabled = impostazione "True" di Button ottiene sovrascritti dal suo genitore. Esiste un modo per fermare questo accada?

Questa sembra una cosa strana da fare, ma ho una situazione in cui, quando un controllo è disattivato e un utente posiziona il mouse su di essa, ho ancora voglia di un evento per essere attivato.

ho letto in WPF Unleashed che avvolgendo qualcosa in un controllo Frame, "..isolates il contenuto dal resto dell'interfaccia utente [e] le proprietà che normalmente sarebbero ereditati giù fermata elemento albero quando raggiungono il Frame", ma avvolgendo il pulsante nell'esempio di cui sopra in una cornice non funziona.

Sono sulla strada sbagliata qui?

È stato utile?

Soluzione

che non è l'eredità, la sua composizione

il controllo contenente è disabilitato, quindi tutti i suoi comandi contenuti sono disabilitati

abilitare il contenitore e il controllo che si desidera, e disabilitare gli altri controlli

Altri suggerimenti

Se è possibile ereditare il pulsante (o qualsiasi controllo che si ha bisogno), è possibile sostituire il CoerceValue per evitare questo comportamento (in realtà, penso che dovrebbe funzionare come IsEnabled IsChecked, essendo un bool ?, in cui i mezzi nulli utilizzano il genitore valore, qualsiasi valore specifico deve essere mantenuto ... ma come questo non è il comportamento, utilizzando questa soluzione risolverà il problema):

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;
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top