我正在尝试在我们的一个 WPF 应用程序中呈现自适应卡片。由于我是 WPF 的新手,因此我想先实现并显示基本的自适应卡片,然后再转到实际要求。 我已经实现了 MS Link 中显示的示例,用于使用 .Net WPF SDK 呈现自适应卡片。我尝试了相同的解决方案并进行了一些必要的更改,如下所示。
MainWindow.XAML:
<Window x:Class="MyFirstWPFDotNetApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid x:Name="RenderAdaptiveCard" Margin="10" Background="WhiteSmoke">
<Grid.Effect>
<DropShadowEffect BlurRadius="15" ShadowDepth="2" RenderingBias="Quality" Direction="-90"/>
</Grid.Effect>
</Grid>
</Grid>
</Window>
代码隐藏代码:
using AdaptiveCards;
using AdaptiveCards.Rendering.Wpf;
using System.Collections.Generic;
using System.Windows;
namespace MyFirstWPFApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
LoadAdaptiveCard();
}
private void LoadAdaptiveCard()
{
// Create a card renderer
AdaptiveCardRenderer renderer = new AdaptiveCardRenderer();
// If using the Xceed package, enable the enhanced input
renderer.UseXceedElementRenderers();
// For fun, check the schema version this renderer supports
AdaptiveSchemaVersion schemaVersion = renderer.SupportedSchemaVersion;
// Build a simple card
// In the real world this would probably be provided as JSON
AdaptiveCard card = new AdaptiveCard("1.0")
{
Body = { new AdaptiveTextBlock() { Text = "Hello World", Id="textWord" } }
};
try
{
// Render the card
RenderedAdaptiveCard renderedCard = renderer.RenderCard(card);
// Get the FrameworkElement
// Add this to your app's UI somewhere
RenderAdaptiveCard.Children.Clear();
RenderAdaptiveCard.Children.Add(renderedCard.FrameworkElement); // Added this line to render it into grid
// (Optional) Check for any renderer warnings
// This includes things like an unknown element type found in the card
// Or the card exceeded the maximum number of supported actions, etc
IList<AdaptiveWarning> warnings = renderedCard.Warnings;
}
catch (AdaptiveException ex)
{
// Failed rendering
}
}
}
}
我在 .Net Framework 4.7.1 和 .Net core 3.1 中尝试了相同的代码,但在这两个应用程序中我都收到错误消息
值不能为空。参数名称:键
在线renderer.RenderCard(card);
.我无法理解这个例子是一半还是我需要添加一些其他引用或参数?尝试进行一些研究,但没有找到有关此主题的任何帮助。
我刚刚遇到这个问题,看到你的问题没有得到回答,所以我想我仍然在这里为任何追随我们的人发帖。
这里的问题是 AdaptiveCard 对象有一个未分配的 InternalId 属性,该属性稍后在 AdaptiveCardRenderer.RenderAdaptiveCardWrapper 方法中用作存储字典的索引。这就是抛出非常不明确的异常的原因,因此只需按以下方式实例化您的 AdaptiveCard 即可解决问题:
AdaptiveCard card = new AdaptiveCard("1.0")
{
Body = { new AdaptiveTextBlock() { Text = "Hello World", Id = "textWord"} },
InternalID = new AdaptiveInternalID()
}