Ejemplo n.º 1
0
        public ShowCardWindow(string title, AdaptiveShowCardAction action, ResourceDictionary resources)
        {
            InitializeComponent();

            _resources = resources;
            _card      = action;
            Title      = title;
        }
        public ShowCardWindow(string title, AdaptiveShowCardAction showCardAction)
        {
            InitializeComponent();
            var renderer     = new AdaptiveCardRenderer();
            var renderedCard = renderer.RenderCard(showCardAction.Card);

            this.rootGrid.Children.Clear();
            this.rootGrid.Children.Add(renderedCard.FrameworkElement);
        }
Ejemplo n.º 3
0
        public static void Create(AdaptiveShowCardAction action, HtmlTag tag, AdaptiveRenderContext renderContext)
        {
            tag.Attr("id", AdaptiveCardRenderer.GenerateRandomId());

            var targetId = AdaptiveCardRenderer.GenerateRandomId();

            tag.Attr("data-ac-showCardId", targetId);

            tag.Attributes.Add("onclick",
                               $"document.getElementById('{targetId}').style.display === 'none' ? document.getElementById('{targetId}').style.display = '' : document.getElementById('{targetId}').style.display = 'none';");
        }
Ejemplo n.º 4
0
        public static void InitializeRenderer(AdaptiveHostConfig hostConfig)
        {
            try
            {
                _renderer = new XamlCardRenderer();
                if (hostConfig != null)
                {
                    _renderer.SetHostConfig(hostConfig);
                }

                // Custom resource resolvers
                _renderer.ResourceResolvers.Set("symbol", new MySymbolResourceResolver());

                _renderer.Action += async(sender, e) =>
                {
                    var m_actionDialog = new ContentDialog();

                    if (e.Action.ActionType == ActionType.ShowCard)
                    {
                        AdaptiveShowCardAction showCardAction = (AdaptiveShowCardAction)e.Action;
                        m_actionDialog.Content = await _renderer.RenderCardAsXamlAsync(showCardAction.Card);
                    }
                    else
                    {
                        m_actionDialog.Content = "We got an action!\n" + e.Action.ActionType + "\n" + e.Inputs;
                    }

                    m_actionDialog.PrimaryButtonText = "Close";

                    await m_actionDialog.ShowAsync();
                };
            }
            catch
            {
                if (Debugger.IsAttached)
                {
                    Debugger.Break();
                }
                throw;
            }
        }
Ejemplo n.º 5
0
        public void ShowCardAction()
        {
            AdaptiveShowCardAction showCardAction = new AdaptiveShowCardAction
            {
                IconUrl = "http://www.stuff.com/icon.jpg",
                Id      = "OpenUrlId",
                Style   = "Destructive",
                Title   = "Title"
            };

            ValidateBaseActionProperties(showCardAction, "http://www.stuff.com/icon.jpg", "OpenUrlId", "Title", "Destructive");

            AdaptiveCard card = new AdaptiveCard();

            showCardAction.Card = card;
            Assert.IsNotNull(showCardAction.Card);

            var jsonString = showCardAction.ToJson().ToString();

            Assert.AreEqual("{\"card\":{\"actions\":[],\"body\":[],\"type\":\"AdaptiveCard\",\"version\":\"1.0\"},\"iconUrl\":\"http://www.stuff.com/icon.jpg\",\"id\":\"OpenUrlId\",\"style\":\"Destructive\",\"title\":\"Title\",\"type\":\"Action.ShowCard\"}", jsonString);
        }
Ejemplo n.º 6
0
        public static FrameworkElement CreateShowCard(this AdaptiveShowCardAction showCardAction, AdaptiveRenderContext context, ActionsConfig actionsConfig)
        {
            Grid uiShowCardContainer = new Grid();

            uiShowCardContainer.Style       = context.GetStyle("Adaptive.Actions.ShowCard");
            uiShowCardContainer.DataContext = showCardAction;
            uiShowCardContainer.Margin      = new Thickness(0, actionsConfig.ShowCard.InlineTopMargin, 0, 0);
            uiShowCardContainer.Visibility  = Visibility.Collapsed;

            // render the card
            var uiShowCardWrapper = (Grid)context.Render(showCardAction.Card);

            uiShowCardWrapper.Background  = context.GetColorBrush("Transparent");
            uiShowCardWrapper.DataContext = showCardAction;

            // Remove the card padding
            var innerCard = (Grid)uiShowCardWrapper.Children[0];

            innerCard.Margin = new Thickness(0);

            uiShowCardContainer.Children.Add(uiShowCardWrapper);

            return(uiShowCardContainer);
        }
Ejemplo n.º 7
0
        public void TestObjectModelActionSetElement()
        {
            AdaptiveCard      card      = new AdaptiveCard(new AdaptiveSchemaVersion("1.2"));
            AdaptiveActionSet actionSet = new AdaptiveActionSet();

            card.Body.Add(actionSet);

            AdaptiveSubmitAction submitAction = new AdaptiveSubmitAction
            {
                Title    = "Action.Submit",
                DataJson = "{\"x\": 13}"
            };

            actionSet.Actions.Add(submitAction);

            AdaptiveOpenUrlAction openUrlAction = new AdaptiveOpenUrlAction
            {
                Title     = "OpenUrl",
                UrlString = "http://adaptivecards.io"
            };

            actionSet.Actions.Add(openUrlAction);

#pragma warning disable 0618
            AdaptiveShowCardAction showCardAction = new AdaptiveShowCardAction
            {
                Title = "ShowCard",
                Card  = new AdaptiveCard
                {
                    Body = new List <AdaptiveElement>
                    {
                        new AdaptiveTextBlock
                        {
                            Text = "This is a show card"
                        }
                    }
                }
            };
#pragma warning restore 0618

            actionSet.Actions.Add(showCardAction);

            AdaptiveToggleVisibilityAction toggleVisibilityAction = new AdaptiveToggleVisibilityAction
            {
                Title          = "Toggle",
                TargetElements = new List <AdaptiveTargetElement> {
                    "test"
                }
            };
            actionSet.Actions.Add(toggleVisibilityAction);

            // This lines are not indented so the comparisson doesn't fail due to extra spaces
            var expectedJson =
                @"{
  ""type"": ""AdaptiveCard"",
  ""version"": ""1.2"",
  ""body"": [
    {
      ""type"": ""ActionSet"",
      ""actions"": [
        {
          ""type"": ""Action.Submit"",
          ""data"": {
            ""x"": 13
          },
          ""title"": ""Action.Submit""
        },
        {
          ""type"": ""Action.OpenUrl"",
          ""url"": ""http://adaptivecards.io"",
          ""title"": ""OpenUrl""
        },
        {
          ""type"": ""Action.ShowCard"",
          ""card"": {
            ""type"": ""AdaptiveCard"",
            ""version"": ""1.0"",
            ""body"": [
              {
                ""type"": ""TextBlock"",
                ""text"": ""This is a show card""
              }
            ]
          },
          ""title"": ""ShowCard""
        },
        {
          ""type"": ""Action.ToggleVisibility"",
          ""targetElements"": [
            ""test""
          ],
          ""title"": ""Toggle""
        }
      ]
    }
  ]
}";

            var outputJson = card.ToJson();
            Assert.AreEqual(outputJson, expectedJson);
        }
Ejemplo n.º 8
0
 public virtual void Visit(AdaptiveShowCardAction action)
 {
     Visit(action.Card);
 }
Ejemplo n.º 9
0
    public static AdaptiveCard CreateFullCardForCandidate(Candidate c)
    {
        AdaptiveCard card = new AdaptiveCard();

        card.Body = new List <AdaptiveElement>();
        AdaptiveContainer header = new AdaptiveContainer();

        card.Body.Add(header);

        header.Items = new List <AdaptiveElement>();
        header.Items.Add(new AdaptiveTextBlock()
        {
            Text   = c.Name,
            Weight = AdaptiveTextWeight.Bolder,
            Size   = AdaptiveTextSize.Large
        });

        AdaptiveColumnSet headerDetails = new AdaptiveColumnSet();

        header.Items.Add(headerDetails);

        AdaptiveColumn col1 = new AdaptiveColumn();

        col1.Width = AdaptiveColumnWidth.Auto;
        col1.Items = new List <AdaptiveElement>
        {
            new AdaptiveImage()
            {
                Url   = new Uri(c.ProfilePicture),
                Size  = AdaptiveImageSize.Small,
                Style = AdaptiveImageStyle.Person
            }
        };

        AdaptiveColumn col2 = new AdaptiveColumn();

        col2.Width = AdaptiveColumnWidth.Stretch;
        col2.Items = new List <AdaptiveElement>
        {
            new AdaptiveTextBlock()
            {
                Text = $"Applied {DateTime.Today.ToString("MM/dd/yyyy")}",
                Wrap = true
            },
            new AdaptiveTextBlock()
            {
                Text     = $"Current role {c.CurrentRole}",
                Spacing  = AdaptiveSpacing.None,
                Wrap     = true,
                IsSubtle = true
            }
        };

        headerDetails.Columns = new List <AdaptiveColumn>
        {
            col1,
            col2
        };

        AdaptiveContainer details = new AdaptiveContainer();

        AdaptiveTextBlock candidateSummary = new AdaptiveTextBlock()
        {
            Text = new CandidatesDataController().GetCandidateBio(c),
            Wrap = true
        };

        AdaptiveFactSet factsCol1 = new AdaptiveFactSet();

        factsCol1.Facts = new List <AdaptiveFact>
        {
            new AdaptiveFact("Applied to position", c.ReqId),
            new AdaptiveFact("Interview date", "Not set")
        };

        AdaptiveFactSet factsCol2 = new AdaptiveFactSet();

        factsCol2.Facts = new List <AdaptiveFact>
        {
            new AdaptiveFact("Hires", c.Hires.ToString()),
            new AdaptiveFact("No hires", c.NoHires.ToString())
        };

        AdaptiveColumnSet factColumns = new AdaptiveColumnSet()
        {
            Columns = new List <AdaptiveColumn>
            {
                new AdaptiveColumn()
                {
                    Items = new List <AdaptiveElement>
                    {
                        factsCol1
                    },
                    Width = AdaptiveColumnWidth.Stretch
                },

                new AdaptiveColumn()
                {
                    Items = new List <AdaptiveElement>
                    {
                        factsCol2
                    },
                    Width = AdaptiveColumnWidth.Stretch
                }
            }
        };

        details.Items = new List <AdaptiveElement>
        {
            candidateSummary,
            factColumns
        };

        card.Body.Add(details);

        AdaptiveImageSet referrals = new AdaptiveImageSet();

        referrals.ImageSize = AdaptiveImageSize.Small;
        referrals.Images    = new List <AdaptiveImage>();

        foreach (Candidate referral in new CandidatesDataController().GetReferrals(c))
        {
            referrals.Images.Add(new AdaptiveImage()
            {
                Url   = new Uri(referral.ProfilePicture),
                Style = AdaptiveImageStyle.Person
            });
        }

        card.Body.Add(new AdaptiveTextBlock()
        {
            Text = "Referrals",
            Size = AdaptiveTextSize.Large
        });
        card.Body.Add(referrals);

        AdaptiveAction setInterview = new AdaptiveShowCardAction()
        {
            Title = "Set interview date",
            Card  = new AdaptiveCard()
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveDateInput()
                    {
                        Id          = "InterviewDate",
                        Placeholder = "Enter in a date for the interview"
                    }
                },
                Actions = new List <AdaptiveAction>
                {
                    new AdaptiveSubmitAction()
                    {
                        Title = "OK"
                    }
                }
            }
        };

        AdaptiveAction setComment = new AdaptiveShowCardAction()
        {
            Title = "Add comment",
            Card  = new AdaptiveCard()
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextInput()
                    {
                        Id          = "Comment",
                        Placeholder = "Add a comment for this candidate",
                        IsMultiline = true
                    }
                },
                Actions = new List <AdaptiveAction>
                {
                    new AdaptiveSubmitAction()
                    {
                        Title = "OK"
                    }
                }
            }
        };

        card.Actions = new List <AdaptiveAction>
        {
            setInterview,
            setComment
        };

        return(card);
    }
Ejemplo n.º 10
0
        protected override async void LoadPayload(string payload)
        {
            var newErrors = await PayloadValidator.ValidateAsync(payload);

            if (newErrors.Any(i => i.Type == ErrorViewModelType.Error))
            {
                MakeErrorsLike(newErrors);
                return;
            }

            try
            {
                if (_renderer == null)
                {
                    InitializeRenderer(MainPageViewModel.HostConfigEditor.HostConfig);
                }
            }
            catch (Exception ex)
            {
                newErrors.Add(new ErrorViewModel()
                {
                    Message = "Initializing renderer error: " + ex.ToString(),
                    Type    = ErrorViewModelType.Error
                });
                MakeErrorsLike(newErrors);
                return;
            }

            try
            {
                JsonObject jsonObject;
                if (JsonObject.TryParse(payload, out jsonObject))
                {
                    RenderedAdaptiveCard renderResult = _renderer.RenderAdaptiveCardFromJson(jsonObject);
                    if (renderResult.FrameworkElement != null)
                    {
                        RenderedCard         = renderResult.FrameworkElement;
                        renderResult.Action += async(sender, e) =>
                        {
                            var m_actionDialog = new ContentDialog();

                            if (e.Action.ActionType == ActionType.ShowCard)
                            {
                                AdaptiveShowCardAction showCardAction   = (AdaptiveShowCardAction)e.Action;
                                RenderedAdaptiveCard   renderedShowCard = _renderer.RenderAdaptiveCard(showCardAction.Card);
                                if (renderedShowCard.FrameworkElement != null)
                                {
                                    m_actionDialog.Content = renderedShowCard.FrameworkElement;
                                }
                            }
                            else
                            {
                                m_actionDialog.Content = SerializeActionEventArgsToString(e);
                            }

                            m_actionDialog.PrimaryButtonText = "Close";

                            await m_actionDialog.ShowAsync();
                        };
                    }
                    else
                    {
                        newErrors.Add(new ErrorViewModel()
                        {
                            Message = "There was an error Rendering this card",
                            Type    = ErrorViewModelType.Error
                        });
                    }
                }
                else
                {
                    newErrors.Add(new ErrorViewModel()
                    {
                        Message = "There was an error creating a JsonObject from the card",
                        Type    = ErrorViewModelType.Error
                    });
                }

                if (RenderedCard is FrameworkElement)
                {
                    (RenderedCard as FrameworkElement).VerticalAlignment = VerticalAlignment.Top;
                }
                MakeErrorsLike(newErrors);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                newErrors.Add(new ErrorViewModel()
                {
                    Message = "Rendering failed",
                    Type    = ErrorViewModelType.Error
                });
                MakeErrorsLike(newErrors);
            }
        }
Ejemplo n.º 11
0
        protected override async void LoadPayload(string payload)
        {
            var newErrors = await PayloadValidator.ValidateAsync(payload);

            if (newErrors.Any(i => i.Type == ErrorViewModelType.Error))
            {
                MakeErrorsLike(newErrors);
                return;
            }

            try
            {
                if (_renderer == null)
                {
                    InitializeRenderer(MainPageViewModel.HostConfigEditor.HostConfig);
                }
            }
            catch (Exception ex)
            {
                newErrors.Add(new ErrorViewModel()
                {
                    Message = "Initializing renderer error: " + ex.ToString(),
                    Type    = ErrorViewModelType.Error
                });
                MakeErrorsLike(newErrors);
                return;
            }

            try
            {
                JsonObject jsonObject;
                if (JsonObject.TryParse(payload, out jsonObject))
                {
                    AdaptiveCardParseResult parseResult = AdaptiveCard.FromJson(jsonObject);

                    RenderedAdaptiveCard renderResult = _renderer.RenderAdaptiveCard(parseResult.AdaptiveCard);
                    if (renderResult.FrameworkElement != null)
                    {
                        RenderedCard         = renderResult.FrameworkElement;
                        renderResult.Action += async(sender, e) =>
                        {
                            var m_actionDialog = new ContentDialog();

                            if (e.Action.ActionType == ActionType.ShowCard)
                            {
                                AdaptiveShowCardAction showCardAction   = (AdaptiveShowCardAction)e.Action;
                                RenderedAdaptiveCard   renderedShowCard = _renderer.RenderAdaptiveCard(showCardAction.Card);
                                if (renderedShowCard.FrameworkElement != null)
                                {
                                    m_actionDialog.Content = renderedShowCard.FrameworkElement;
                                }
                            }
                            else
                            {
                                m_actionDialog.Content = SerializeActionEventArgsToString(e);
                            }

                            m_actionDialog.PrimaryButtonText = "Close";

                            await m_actionDialog.ShowAsync();
                        };

                        if (!MainPageViewModel.HostConfigEditor.HostConfig.Media.AllowInlinePlayback)
                        {
                            renderResult.MediaPlay += async(sender, e) =>
                            {
                                var onPlayDialog = new ContentDialog();
                                onPlayDialog.Content = "MediaPlayEvent:";

                                foreach (var source in e.Media.Sources)
                                {
                                    onPlayDialog.Content += "\n" + source.Url + " (" + source.MimeType + ")";
                                }

                                onPlayDialog.PrimaryButtonText = "Close";

                                await onPlayDialog.ShowAsync();
                            };
                        }
                        else
                        {
                            renderResult.MediaEnded += async(sender, e) =>
                            {
                                var mediaEndedDialog = new ContentDialog();
                                mediaEndedDialog.Content = "Media Ended Event:";

                                foreach (var source in e.Media.Sources)
                                {
                                    mediaEndedDialog.Content += "\n" + source.Url + " (" + source.MimeType + ")";
                                }

                                mediaEndedDialog.PrimaryButtonText = "Close";

                                await mediaEndedDialog.ShowAsync();
                            };
                        }
                    }
                    else
                    {
                        newErrors.Add(new ErrorViewModel()
                        {
                            Message = "There was an error Rendering this card",
                            Type    = ErrorViewModelType.Error
                        });
                    }
                    foreach (var error in parseResult.Errors)
                    {
                        newErrors.Add(new ErrorViewModel()
                        {
                            Message = error.Message,
                            Type    = ErrorViewModelType.Error
                        });
                    }
                    foreach (var error in renderResult.Errors)
                    {
                        newErrors.Add(new ErrorViewModel()
                        {
                            Message = error.Message,
                            Type    = ErrorViewModelType.Error
                        });
                    }
                    foreach (var error in parseResult.Warnings)
                    {
                        newErrors.Add(new ErrorViewModel()
                        {
                            Message = error.Message,
                            Type    = ErrorViewModelType.Warning
                        });
                    }

                    foreach (var error in renderResult.Warnings)
                    {
                        newErrors.Add(new ErrorViewModel()
                        {
                            Message = error.Message,
                            Type    = ErrorViewModelType.Warning
                        });
                    }
                }
                else
                {
                    newErrors.Add(new ErrorViewModel()
                    {
                        Message = "There was an error creating a JsonObject from the card",
                        Type    = ErrorViewModelType.Error
                    });
                }

                if (RenderedCard is FrameworkElement)
                {
                    (RenderedCard as FrameworkElement).VerticalAlignment = VerticalAlignment.Top;
                }
                MakeErrorsLike(newErrors);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                newErrors.Add(new ErrorViewModel()
                {
                    Message = "Rendering failed",
                    Type    = ErrorViewModelType.Error
                });
                MakeErrorsLike(newErrors);
            }
        }
Ejemplo n.º 12
0
        public static void AddActions(Grid uiContainer, IList <AdaptiveAction> actions, AdaptiveRenderContext context)
        {
            if (!context.Config.SupportsInteractivity)
            {
                return;
            }

            ActionsConfig         actionsConfig = context.Config.Actions;
            int                   maxActions    = actionsConfig.MaxActions;
            List <AdaptiveAction> list          = actions.Take <AdaptiveAction>(maxActions).ToList <AdaptiveAction>();

            if (!list.Any <AdaptiveAction>())
            {
                return;
            }

            var flexLayout = new FlexLayout()
            {
                JustifyContent = FlexJustify.SpaceEvenly
            };

            if (actionsConfig.ActionsOrientation != ActionsOrientation.Horizontal)
            {
                flexLayout.Direction = FlexDirection.Row;
            }
            else
            {
                flexLayout.Direction = FlexDirection.Column;
            }

            flexLayout.AlignItems = FlexAlignItems.Center;
            flexLayout.Style      = context.GetStyle("Adaptive.Actions");
            flexLayout.Margin     = new Thickness(0, (double)((actionsConfig.ActionsOrientation == ActionsOrientation.Horizontal ? context.Config.GetSpacing(actionsConfig.Spacing) : context.Config.GetSpacing(actionsConfig.Spacing) - actionsConfig.ButtonSpacing)), 0, 0);
            uiContainer.RowDefinitions.Add(new RowDefinition()
            {
                Height = GridLength.Auto
            });

            Grid.SetRow(flexLayout, uiContainer.RowDefinitions.Count - 1);
            uiContainer.Children.Add(flexLayout);
            bool actionMode = actionsConfig.ShowCard.ActionMode == ShowCardActionMode.Inline;

            if (actionMode)
            {
                if (list.Any <AdaptiveAction>((AdaptiveAction a) => a is AdaptiveShowCardAction))
                {
                    uiContainer.RowDefinitions.Add(new RowDefinition()
                    {
                        Height = GridLength.Auto
                    });
                }
            }
            int         num   = 0;
            List <View> views = new List <View>();

            foreach (AdaptiveAction adaptiveAction in list)
            {
                var button = (Button)context.Render(adaptiveAction);
                if (actionsConfig.ActionsOrientation != ActionsOrientation.Horizontal)
                {
                    button.Margin = new Thickness(0, (double)actionsConfig.ButtonSpacing, 0, 0);
                }
                else if (flexLayout.Children.Count > 0)
                {
                    button.Margin = new Thickness((double)actionsConfig.ButtonSpacing, 0, 0, 0);
                }
                if (actionsConfig.ActionsOrientation == ActionsOrientation.Horizontal)
                {
                    int num1 = num;
                    num = num1 + 1;
                    Grid.SetColumn(button, num1);
                }
                flexLayout.Children.Add(button);
                AdaptiveShowCardAction adaptiveShowCardAction  = adaptiveAction as AdaptiveShowCardAction;
                AdaptiveShowCardAction adaptiveShowCardAction1 = adaptiveShowCardAction;
                if (adaptiveShowCardAction == null || !actionMode)
                {
                    continue;
                }
                var grid = new Grid()
                {
                    Style          = context.GetStyle("Adaptive.Actions.ShowCard"),
                    BindingContext = adaptiveShowCardAction1,
                    Margin         = new Thickness(0, (double)actionsConfig.ShowCard.InlineTopMargin, 0, 0),
                    IsVisible      = false
                };

                var showCardGrid = (Grid)context.Render(adaptiveShowCardAction1.Card);
                showCardGrid.BackgroundColor    = Color.Transparent;
                showCardGrid.BindingContext     = adaptiveShowCardAction1;
                showCardGrid.Children[0].Margin = new Thickness(0);

                grid.Children.Add(showCardGrid);
                views.Add(grid);
                Grid.SetRow(grid, uiContainer.RowDefinitions.Count - 1);
                uiContainer.Children.Add(grid);

                button.Clicked += new EventHandler((object sender, EventArgs e) =>
                {
                    foreach (var actionBarCard in views)
                    {
                        actionBarCard.IsVisible = false;
                    }
                    if (!grid.IsVisible)
                    {
                        grid.IsVisible = true;
                    }
                });
            }
        }
        public static void AddActions(Grid uiContainer, IList <AdaptiveAction> actions, AdaptiveRenderContext context)
        {
            var maxActions       = context.Config.Actions.MaxActions;
            var actionsToProcess = actions
                                   .Take(maxActions).ToList();

            if (actionsToProcess.Any())
            {
                var uiActionBar = new UniformGrid();

                if (context.Config.Actions.ActionsOrientation == ActionsOrientation.Horizontal)
                {
                    uiActionBar.Columns = actionsToProcess.Count();
                }
                else
                {
                    uiActionBar.Rows = actionsToProcess.Count();
                }

                uiActionBar.HorizontalAlignment = (HorizontalAlignment)Enum.Parse(typeof(HorizontalAlignment), context.Config.Actions.ActionAlignment.ToString());
                uiActionBar.VerticalAlignment   = VerticalAlignment.Bottom;
                uiActionBar.Style  = context.GetStyle("Adaptive.Actions");
                uiActionBar.Margin = new Thickness(0, context.Config.GetSpacing(AdaptiveSpacing.Default), 0, 0);

                uiContainer.RowDefinitions.Add(new RowDefinition()
                {
                    Height = GridLength.Auto
                });
                Grid.SetRow(uiActionBar, uiContainer.RowDefinitions.Count - 1);
                uiContainer.Children.Add(uiActionBar);

                bool isInline = (context.Config.Actions.ShowCard.ActionMode == ShowCardActionMode.Inline);

                if (isInline && actionsToProcess.Any(a => a is AdaptiveShowCardAction))
                {
                    uiContainer.RowDefinitions.Add(new RowDefinition()
                    {
                        Height = GridLength.Auto
                    });
                }

                int iPos = 0;
                List <FrameworkElement> actionBarCards = new List <FrameworkElement>();
                foreach (var action in actionsToProcess)
                {
                    // add actions
                    var uiAction = (Button)context.Render(action);
                    if (uiAction != null)
                    {
                        if (uiActionBar.Children.Count > 0)
                        {
                            if (context.Config.Actions.ActionsOrientation == ActionsOrientation.Horizontal)
                            {
                                uiAction.Margin = new Thickness(context.Config.Actions.ButtonSpacing, 0, 0, 0);
                            }
                            else
                            {
                                uiAction.Margin = new Thickness(0, context.Config.Actions.ButtonSpacing, 0, 0);
                            }
                        }

                        if (context.Config.Actions.ActionsOrientation == ActionsOrientation.Horizontal)
                        {
                            Grid.SetColumn(uiAction, iPos++);
                        }

                        uiActionBar.Children.Add(uiAction);

                        if (action is AdaptiveShowCardAction)
                        {
                            AdaptiveShowCardAction adaptiveShowCardAction = (AdaptiveShowCardAction)action;
                            if (isInline)
                            {
                                Grid uiShowCardContainer = new Grid();
                                uiShowCardContainer.Style       = context.GetStyle("Adaptive.Actions.ShowCard");
                                uiShowCardContainer.DataContext = adaptiveShowCardAction;
                                uiShowCardContainer.Margin      = new Thickness(0, context.Config.Actions.ShowCard.InlineTopMargin, 0, 0);
                                uiShowCardContainer.Visibility  = Visibility.Collapsed;

                                // render the card
                                var uiShowCard = context.Render(adaptiveShowCardAction.Card);
                                ((Grid)uiShowCard).Background = context.GetColorBrush("Transparent");
                                uiShowCard.DataContext        = adaptiveShowCardAction;
                                uiShowCardContainer.Children.Add(uiShowCard);

                                actionBarCards.Add(uiShowCardContainer);
                                Grid.SetRow(uiShowCardContainer, uiContainer.RowDefinitions.Count - 1);
                                uiContainer.Children.Add(uiShowCardContainer);

                                uiAction.Click += (sender, e) =>
                                {
                                    bool showCard = (uiShowCardContainer.Visibility != Visibility.Visible);
                                    foreach (var actionBarCard in actionBarCards)
                                    {
                                        actionBarCard.Visibility = Visibility.Collapsed;
                                    }
                                    if (showCard)
                                    {
                                        uiShowCardContainer.Visibility = Visibility.Visible;
                                    }
                                };
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 14
0
        public MainPage()
        {
            this.InitializeComponent();

            // Construct a temporary object model tree until the parser is available
            AdaptiveCard      card       = new AdaptiveCard();
            AdaptiveContainer container1 = new AdaptiveContainer();

            AdaptiveTextBlock textBlock1 = new AdaptiveTextBlock();

            textBlock1.Text   = "Hello";
            textBlock1.Weight = TextWeight.Normal;
            textBlock1.Color  = TextColor.Warning;
            textBlock1.Size   = TextSize.Large;
            container1.Items.Add(textBlock1);
            AdaptiveTextBlock textBlock2 = new AdaptiveTextBlock();

            textBlock2.Text   = "World";
            textBlock2.Weight = TextWeight.Normal;
            textBlock2.Color  = TextColor.Accent;
            container1.Items.Add(textBlock2);

            card.Body.Add(container1);

            AdaptiveContainer container2 = new AdaptiveContainer();

            AdaptiveTextBlock textBlock3 = new AdaptiveTextBlock();

            textBlock3.Text   = "In new container";
            textBlock3.Weight = TextWeight.Normal;
            textBlock3.Color  = TextColor.Default;
            container2.Items.Add(textBlock3);

            card.Body.Add(container2);

            AdaptiveImage image = new AdaptiveImage();

            image.Url = new Uri("https://unsplash.it/360/202?image=883");
            card.Body.Add(image);

            m_renderer = new AdaptiveCards.XamlCardRenderer.XamlCardRenderer();

            m_renderer.Action += async(sender, e) =>
            {
                if (m_actionDialog != null)
                {
                    m_actionDialog.Hide();
                }

                m_actionDialog = new ContentDialog();

                if (e.Action.ActionType == ActionType.ShowCard)
                {
                    AdaptiveShowCardAction showCardAction = (AdaptiveShowCardAction)e.Action;
                    m_actionDialog.Content = await m_renderer.RenderCardAsXamlAsync(showCardAction.Card);
                }
                else
                {
                    m_actionDialog.Content = "We got an action!\n" + e.Action.ActionType + "\n" + e.Inputs;
                }

                m_actionDialog.PrimaryButtonText = "Close";

                await m_actionDialog.ShowAsync();
            };

            PopulateXamlContent(card);
        }