Suchen
Aktuell
- Aktuell
- Kommentare
- TagCloud
- Windows Phone 7: Silverlight und XNA
- 1267769400 1267769400 - Keine Kommentare
- Empfehlung: Microsoft Arc Keyboard
- 1266747660 1266747660 - 2 Kommentare
- C#: Outlook like Pop-up Alert
- 1264008720 1264008720 - Keine Kommentare
- Windows Mobile 7 - Verschiedene Versionen geplant
- 1264007340 1264007340 - Keine Kommentare
- Windows Media Center: Pixelfehler am rechten Rand
- 1260208800 1260208800 - Keine Kommentare
- Das Outlook Fenster kann nicht geöffnet werden #2
- 1259409180 1259409180 - 14 Kommentare
- Bis jetzt sind noch keine Kommentare geschrieben worden
Randnotiz
W3C
- Keine Kommentare
C#: WPF Accordion Usercontrol
Im .net Framework wird leider kein fertiges Accordion Control für WPF mitgeliefert. Dies ist auch nicht weiter schlimm, den ein eigenes kann man sich sehr schnell selber zusammenbauen. Dazu nimmt man als Basis einfach ein StackPanel und fügt diesem als Inhalt Expander Controls hinzu.
public class Accordion : StackPanel
{
static Accordion()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Accordion), new FrameworkPropertyMetadata(typeof(Accordion)));
}
protected override void OnInitialized(System.EventArgs e)
{
base.OnInitialized(e);
InitializeAccordion();
}
protected void InitializeAccordion()
{
Expander selectedExpander;
foreach(UIElement element in Children)
{
selectedExpander = element as Expander;
if(selectedExpander != null)
selectedExpander.Expanded += SelectedExpanderExpanded;
}
}
public void SelectedExpanderExpanded(object sender, RoutedEventArgs e)
{
Expander selectedExpander = sender as Expander;
Expander otherExpander;
ContentPresenter contentPresenter;
double totalExpanderHeight = 0;
if (selectedExpander == null)
return;
foreach(UIElement element in Children)
{
otherExpander = element as Expander;
if (otherExpander == null || otherExpander == selectedExpander)
continue;
if(otherExpander.IsExpanded)
{
contentPresenter = otherExpander.Template.FindName("ExpandSite", otherExpander) as ContentPresenter;
if (contentPresenter != null)
totalExpanderHeight -= contentPresenter.ActualHeight;
}
otherExpander.IsExpanded = false;
totalExpanderHeight += otherExpander.ActualHeight;
}
if(selectedExpander.IsExpanded)
{
contentPresenter = selectedExpander.Template.FindName("ExpandSite", selectedExpander) as ContentPresenter;
if (contentPresenter != null)
contentPresenter.Height = ActualHeight - totalExpanderHeight - selectedExpander.ActualHeight;
}
}
}
Im XAML-Code dann einfach das Accordion hinzufügen und als Children-Elemente Expander hinzufügen
<c:Accordion>
<Expander Header="Inhalt #1">
<Grid />
</Expander>
<Expander header="Inhalt #2">
<Grid />
</Expander>
</c:accordion>
Kommentare
- Bis jetzt sind noch keine Kommentare geschrieben worden



