public static FrameworkElement RenderAdaptiveCardWrapper(AdaptiveCard card, AdaptiveRenderContext context) { var outerGrid = new Grid(); outerGrid.Style = context.GetStyle("Adaptive.Card"); outerGrid.Background = context.GetColorBrush(context.Config.ContainerStyles.Default.BackgroundColor); outerGrid.SetBackgroundSource(card.BackgroundImage, context); var grid = new Grid(); grid.Style = context.GetStyle("Adaptive.InnerCard"); grid.Margin = new Thickness(context.Config.Spacing.Padding); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); AdaptiveContainerRenderer.AddContainerElements(grid, card.Body, context); AdaptiveActionSetRenderer.AddActions(grid, card.Actions, context); outerGrid.Children.Add(grid); return(outerGrid); }
public static FrameworkElement RenderAdaptiveCardWrapper(AdaptiveCard card, AdaptiveRenderContext context) { var outerGrid = new Grid(); outerGrid.Style = context.GetStyle("Adaptive.Card"); outerGrid.Background = context.GetColorBrush(context.Config.ContainerStyles.Default.BackgroundColor); outerGrid.SetBackgroundSource(card.BackgroundImage, context); if (context.CardRoot == null) { context.CardRoot = outerGrid; } // Reset the parent style context.RenderArgs.ParentStyle = AdaptiveContainerStyle.Default; var grid = new Grid(); grid.Style = context.GetStyle("Adaptive.InnerCard"); grid.Margin = new Thickness(context.Config.Spacing.Padding); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); switch (card.VerticalContentAlignment) { case AdaptiveVerticalContentAlignment.Center: grid.VerticalAlignment = VerticalAlignment.Center; break; case AdaptiveVerticalContentAlignment.Bottom: grid.VerticalAlignment = VerticalAlignment.Bottom; break; case AdaptiveVerticalContentAlignment.Top: default: break; } outerGrid.MinHeight = card.PixelMinHeight; outerGrid.Children.Add(grid); AdaptiveContainerRenderer.AddContainerElements(grid, card.Body, context); AdaptiveActionSetRenderer.AddRenderedActions(grid, card.Actions, context); if (card.SelectAction != null) { var outerGridWithSelectAction = context.RenderSelectAction(card.SelectAction, outerGrid); return(outerGridWithSelectAction); } return(outerGrid); }
public static FrameworkElement RenderAdaptiveCardWrapper(AdaptiveCard card, AdaptiveRenderContext context) { var outerGrid = new Grid(); outerGrid.Style = context.GetStyle("Adaptive.Card"); outerGrid.Background = context.GetColorBrush(context.Config.ContainerStyles.Default.BackgroundColor); outerGrid.SetBackgroundSource(card.BackgroundImage, context); if (context.CardRoot == null) { context.CardRoot = outerGrid; } // Reset the parent style context.RenderArgs.ParentStyle = AdaptiveContainerStyle.Default; var grid = new Grid(); grid.Style = context.GetStyle("Adaptive.InnerCard"); grid.Margin = new Thickness(context.Config.Spacing.Padding); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); switch (card.VerticalContentAlignment) { case AdaptiveVerticalContentAlignment.Center: grid.VerticalAlignment = VerticalAlignment.Center; break; case AdaptiveVerticalContentAlignment.Bottom: grid.VerticalAlignment = VerticalAlignment.Bottom; break; case AdaptiveVerticalContentAlignment.Top: default: break; } AdaptiveContainerRenderer.AddContainerElements(grid, card.Body, context); AdaptiveActionSetRenderer.AddActions(grid, card.Actions, context); // Only handle Action show cards for the main card if (context.CardDepth == 1) { // Define a new row to contain all the show cards if (context.ActionShowCards.Count > 0) { grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); } foreach (var showCardTuple in context.ActionShowCards) { var currentShowCard = showCardTuple.Value; var uiButton = showCardTuple.Key; Grid.SetRow(currentShowCard, grid.RowDefinitions.Count - 1); grid.Children.Add(currentShowCard); // Assign on click function to all button elements uiButton.Click += (sender, e) => { bool isCardCollapsed = (currentShowCard.Visibility != Visibility.Visible); // Collapse all the show cards foreach (var t in context.ActionShowCards) { var showCard = t.Value; showCard.Visibility = Visibility.Collapsed; } // If current card is previously collapsed, show it if (isCardCollapsed) { currentShowCard.Visibility = Visibility.Visible; } }; } } outerGrid.Children.Add(grid); if (card.SelectAction != null) { var outerGridWithSelectAction = context.RenderSelectAction(card.SelectAction, outerGrid); return(outerGridWithSelectAction); } return(outerGrid); }
public static void AddContainerElements(Grid uiContainer, IList <AdaptiveElement> elements, AdaptiveRenderContext context) { // Keeping track of the index so we don't have to call IndexOf function on every iteration int index = 0; foreach (var cardElement in elements) { if (index != 0) { // Only the first element can bleed to the top context.RenderArgs.BleedDirection &= ~BleedDirection.BleedUp; } if (index != elements.Count - 1) { // Only the last element can bleed to the bottom context.RenderArgs.BleedDirection &= ~BleedDirection.BleedDown; } index++; // each element has a row FrameworkElement uiElement = context.Render(cardElement); if (uiElement != null) { TagContent tag = null; Grid separator = null; if (cardElement.Separator && uiContainer.Children.Count > 0) { separator = AddSeparator(context, cardElement, uiContainer); } else if (uiContainer.Children.Count > 0) { separator = AddSpacing(context, cardElement, uiContainer); } tag = new TagContent(separator, uiContainer); uiElement.Tag = tag; // Sets the minHeight property for Container and ColumnSet if (cardElement.Type == "Container" || cardElement.Type == "ColumnSet") { AdaptiveCollectionElement collectionElement = (AdaptiveCollectionElement)cardElement; uiElement.MinHeight = collectionElement.PixelMinHeight; } int rowDefinitionIndex = uiContainer.RowDefinitions.Count; RowDefinition rowDefinition = null; if (cardElement.Height != AdaptiveHeight.Stretch) { rowDefinition = new RowDefinition() { Height = GridLength.Auto }; uiContainer.RowDefinitions.Add(rowDefinition); Grid.SetRow(uiElement, rowDefinitionIndex); uiContainer.Children.Add(uiElement); // Row definition is stored in the tag for containers and elements that stretch // so when the elements are shown, the row can have it's original definition, // while when the element is hidden, the extra space is not reserved in the layout tag.RowDefinition = rowDefinition; tag.ViewIndex = rowDefinitionIndex; context.SetVisibility(uiElement, cardElement.IsVisible, tag); } else { rowDefinition = new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) }; uiContainer.RowDefinitions.Add(rowDefinition); // Row definition is stored in the tag for containers and elements that stretch // so when the elements are shown, the row can have it's original definition, // while when the element is hidden, the extra space is not reserved in the layout tag.RowDefinition = rowDefinition; tag.ViewIndex = rowDefinitionIndex; if (cardElement.Type == "Container") { Grid.SetRow(uiElement, rowDefinitionIndex); uiContainer.Children.Add(uiElement); context.SetVisibility(uiElement, cardElement.IsVisible, tag); } else { StackPanel panel = new StackPanel(); if (!String.IsNullOrEmpty(cardElement.Id)) { panel.Name = cardElement.Id; } panel.Children.Add(uiElement); panel.Tag = tag; Grid.SetRow(panel, rowDefinitionIndex); uiContainer.Children.Add(panel); context.SetVisibility(panel, cardElement.IsVisible, tag); } } if (cardElement.Type == "ActionSet") { AdaptiveActionSetRenderer.AddShowCardsViewsToRoot(context); } } } context.ResetSeparatorVisibilityInsideContainer(uiContainer); }