/// <summary> /// Adds a pane to the visited list, and sets it to the current expanded pane /// </summary> public void VisitPane(AccordionPane pane) { if (pane != null) { ExpandedPane = pane; } }
/// <summary> /// Replace a visited pane with another, deleting the previous history. /// </summary> public void VisitPane(AccordionPane oldPane, AccordionPane newPane) { if (oldPane != newPane) { int index; if ((index = visitedPanes.IndexOf(oldPane)) >= 0) { visitedPanes[index] = newPane; visitedPanes.RemoveAll((pane) => index < visitedPanes.IndexOf(pane)); } ExpandedPane = newPane; } }
public AccordionHeader(AccordionPane pane) { HeightRequest = 50; HorizontalOptions = LayoutOptions.FillAndExpand; // Setup the AccordionHeader layout Content = (titleLayout = new RelativeLayout() { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand }); titleLayout.Children.Add((imageHolder = new StackLayout() { VerticalOptions = LayoutOptions.FillAndExpand, WidthRequest = 60 }), heightConstraint: Constraint.RelativeToParent((parent) => { return(parent.Height); })); StackLayout imageContainer; imageHolder.Children.Add(imageContainer = new StackLayout() { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, Padding = new Thickness(20, 0, 0, 0) }); imageContainer.Children.Add((iconImage = new Image() { HeightRequest = 32, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.CenterAndExpand })); titleLayout.Children.Add((titleLabel = new Label() { HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center, HorizontalTextAlignment = TextAlignment.Center, VerticalTextAlignment = TextAlignment.Center, FontSize = 20f, TextColor = Color.White, FontAttributes = FontAttributes.Bold }), widthConstraint: Constraint.RelativeToParent((parent) => { return(parent.Width); }), heightConstraint: Constraint.RelativeToParent((parent) => { return(parent.Height); })); }
/// <summary> /// Called when ExpandedPane property is changed /// </summary> private void OnExpandedPaneChanged(AccordionPane oldExpanded) { bool expandedFound = false; if (ExpandedPane != null) { AccordionPane newExpanded = ExpandedPane; if (!visitedPanes.Contains(newExpanded)) { visitedPanes.Add(newExpanded); } nextPanes.Children.Clear(); prevPanes.Children.Clear(); if (oldExpanded != null) { oldExpanded.IsVisible = false; oldExpanded.OnPaneCollapsed(); // invoke method when the pane collapses } newExpanded.IsVisible = true; newExpanded.OnPaneExpanded(); foreach (AccordionPane pane in visitedPanes) { if (pane == newExpanded) { expandedFound = true; } else { if (expandedFound) { nextPanes.Children.Add(pane.Header); } else { prevPanes.Children.Add(pane.Header); } } } } }
/// <summary> /// Checks if a pane is visited /// </summary> public bool IsPaneVisited(AccordionPane pane) { return(visitedPanes.Contains(pane)); }