Come posso creare un WPF Expander Stretch?

Il controllo Expander in WPF non si estende per riempire tutto lo spazio disponibile. Esistono soluzioni in XAML per questo?

Tutto ciò che devi fare è questo:

      I am some content...   

http://joshsmithonwpf.wordpress.com/2007/02/24/stretching-content-in-an-expander-header/

Expander non estensibile di solito è il problema dei controlli padre non estensibili. Forse uno dei controlli padre ha definito una proprietà HorizontalAlignment o VerticalAlignment ?

Se puoi pubblicare un codice di esempio, possiamo darti una risposta migliore.

Questa soluzione è molto più semplice e non influisce su altri controlli di espansione che è ansible utilizzare nella propria applicazione.

      

La risposta accettata viene estratta dal controllo perché il contenuto dell’intestazione si trova in una colonna e il pulsante di espansione è nel primo. Potrebbe essere abbastanza buono per alcuni casi.

Se vuoi una soluzione pulita devi cambiare il modello dell’espansore.

Un altro modo è una proprietà associata:

 using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; public static class ParentContentPresenter { public static readonly System.Windows.DependencyProperty HorizontalAlignmentProperty = System.Windows.DependencyProperty.RegisterAttached( "HorizontalAlignment", typeof(HorizontalAlignment), typeof(ParentContentPresenter), new PropertyMetadata(default(HorizontalAlignment), OnHorizontalAlignmentChanged)); public static void SetHorizontalAlignment(this UIElement element, HorizontalAlignment value) { element.SetValue(HorizontalAlignmentProperty, value); } [AttachedPropertyBrowsableForChildren(IncludeDescendants = false)] [AttachedPropertyBrowsableForType(typeof(UIElement))] public static HorizontalAlignment GetHorizontalAlignment(this UIElement element) { return (HorizontalAlignment)element.GetValue(HorizontalAlignmentProperty); } private static void OnHorizontalAlignmentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var presenter = d.Parents().OfType().FirstOrDefault(); if (presenter != null) { presenter.HorizontalAlignment = (HorizontalAlignment) e.NewValue; } } private static IEnumerable Parents(this DependencyObject child) { var parent = VisualTreeHelper.GetParent(child); while (parent != null) { yield return parent; child = parent; parent = VisualTreeHelper.GetParent(child); } } } 

Ti permette di fare:

      ...     

Si noti che l’uso della proprietà associata è alquanto fragile in quanto presuppone che ci sia un ContentPresenter nel modello.

Sono abbastanza sorpreso che nessuno abbia menzionato solo la modifica del modello di controllo, tutte le altre soluzioni hanno alcuni inconvenienti piuttosto seri che non rispettano la larghezza del calcolo, non il ridisegno, il tempo di rendering ecc …

Questo modello di controllo modificherà l’allineamento orizzontale del contenuto contenuto nell’intestazione in modo che corrisponda agli espansori effettivi (il che significa che si estenderà)

                                                    

Accetto con HTH – controlla in che tipo di contenitore stai mettendo l’Expander in … lo StackPanel ripiegherà sempre i bambini fino alla dimensione più piccola a cui possono andare.

Sto usando molto Expanders nel mio progetto, e se li trascini in un Grid / DockPanel, l’expander riempirà tutto lo spazio disponibile (assumendo che gli orientamenti Vertical e Horizontal siano impostati su Stretch).

Il suggerimento di Jonathan di bind la larghezza dell’espansore alla larghezza del contenitore può diventare un po ‘complicato … Ho provato questa tecnica qualche settimana fa e ho scoperto che può produrre risultati indesiderati in alcuni casi, perché può inibire il funzionamento del sistema di layout.

PS: Come suggerimento generale (e sono sicuro che verrò fiammeggiato per averlo scritto), se non sei sicuro di quale tipo di layout-container hai nei tuoi controlli, allora inizia con una griglia. L’utilizzo delle definizioni Colonna e Riga consente di controllare molto facilmente se i controlli figlio utilizzano lo spazio minimo (“Auto”), lo spazio massimo (“*”) o una quantità esatta di spazio (“[numero]”).

          HEADER TEXT     

Il Silverlight Toolkit include un controllo della fisarmonica che si comporta come un espansore che si estende sempre allo spazio disponibile. Non l’ho ancora testato, ma potrebbe anche essere funzionale per WPF, come i controlli di Silverlight Chart.