/// <summary> /// You can use this from within a WPF app, passing in resource dictionary directly /// </summary> /// <param name="hostConfig"></param> /// <param name="resources"></param> public ImageRenderer(HostConfig hostConfig, ResourceDictionary resources) { hostConfig.SupportsInteractivity = false; _xamlRenderer = new AdaptiveCardRenderer(hostConfig) { Resources = resources }; }
/// <summary> /// Use this from a Server, passing in the path to a resource dictionary so that UI resources can be created in correct thread /// </summary> /// <param name="hostConfig"></param> /// <param name="stylePath"></param> public ImageRenderer(HostConfig hostConfig, string stylePath) { hostConfig.SupportsInteractivity = false; _xamlRenderer = new AdaptiveCardRenderer(hostConfig) { StylePath = stylePath }; }
protected static void AddContainerElements(HtmlTag uiContainer, List <CardElement> elements, List <ActionBase> actions, RenderContext context) { if (elements != null) { foreach (var cardElement in elements) { // each element has a row var uiElement = context.Render(cardElement); if (uiElement != null) { if (uiContainer.Children.Any()) { AdaptiveCardRenderer.AddSeparator(uiContainer, cardElement, context); } uiContainer.Children.Add(uiElement); } } } if (context.Config.SupportsInteractivity && actions != null) { var uiButtonStrip = new DivTag() .AddClass("ac-actionset") .Style("display", "flex"); // contains ShowCardAction.AdaptiveCard var uiShowCardStrip = new DivTag() .Style("margin-top", context.Config.Actions.ShowCard.InlineTopMargin + "px"); if (context.Config.Actions.ActionsOrientation == ActionsOrientation.Horizontal) { uiButtonStrip.Style("flex-direction", "row"); switch (context.Config.Actions.ActionAlignment) { case HorizontalAlignment.Center: uiButtonStrip.Style("justify-content", "center"); break; case HorizontalAlignment.Right: uiButtonStrip.Style("justify-content", "flex-end"); break; default: uiButtonStrip.Style("justify-content", "flex-start"); break; } } else { uiButtonStrip.Style("flex-direction", "column"); switch (context.Config.Actions.ActionAlignment) { case HorizontalAlignment.Center: uiButtonStrip.Style("align-items", "center"); break; case HorizontalAlignment.Right: uiButtonStrip.Style("align-items", "flex-end"); break; case HorizontalAlignment.Stretch: uiButtonStrip.Style("align-items", "stretch"); break; default: uiButtonStrip.Style("align-items", "flex-start"); break; } } var maxActions = Math.Min(context.Config.Actions.MaxActions, actions.Count); for (var i = 0; i < maxActions; i++) { // add actions var uiAction = context.Render(actions[i]); if (uiAction != null) { if (actions[i].Type == ShowCardAction.TYPE) { // add button-card mapping for clients to implement showcard action var cardId = "ac-showCard" + i; uiAction.Attr("ac-cardId", cardId); var uiCard = context.Render(((ShowCardAction)actions[i]).Card); if (uiCard != null) { uiCard.Attr(cardId, string.Empty) .AddClass("ac-showCard") .Style("display", "none"); uiShowCardStrip.Children.Add(uiCard); } } uiButtonStrip.Children.Add(uiAction); } // add spacer between buttons according to config if (i < maxActions - 1 && context.Config.Actions.ButtonSpacing > 0) { var uiSpacer = new HtmlTag("div"); if (context.Config.Actions.ActionsOrientation == ActionsOrientation.Horizontal) { uiSpacer.Style("flex", "0 0 auto"); uiSpacer.Style("width", context.Config.Actions.ButtonSpacing + "px"); } else { uiSpacer.Style("height", context.Config.Actions.ButtonSpacing + "px"); } uiButtonStrip.Children.Add(uiSpacer); } } if (uiButtonStrip.Children.Any()) { AdaptiveCardRenderer.AddSeparator(uiContainer, new Container(), context); uiContainer.Children.Add(uiButtonStrip); } if (uiShowCardStrip.Children.Any()) { uiContainer.Children.Add(uiShowCardStrip); } } }