Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zurück: Anzeigen von Markdowninhalten
Nachdem wir nun wissen, wie Sie grundlegende Markdowninhalte präsentieren, versuchen wir, etwas aussagekräftiger anzuzeigen, indem wir die Leistungsfähigkeit von Adaptive Karten nutzen. Dies ist nützlich zum Erstellen von Formularen oder zum Anzeigen komplexerer Inhalte.
Arbeiten mit Formularen
Sie können eine Karte in der Befehlspalette mit der IFormContent Schnittstelle erstellen (siehe FormContent für die Toolkitimplementierung). Auf diese Weise können Sie den JSON-Code für adaptive Karten bereitstellen, der von der Befehlspalette gerendert wird. Wenn der Benutzer das Formular sendet, ruft die Befehlspalette die SubmitForm Methode auf Ihrem Formular mit den JSON-Daten und den Eingaben aus dem Formular auf.
Tipp
Adaptive Kartennutzlasten können mit dem Designer für adaptive Karten erstellt werden. Sie können Ihre Karte dort entwerfen und dann die JSON-Nutzlast in Ihre Erweiterung kopieren.
- Fügen Sie im
PagesVerzeichnis eine neue Klasse hinzu. - Benennen der Klasse
FormPage - Aktualisieren Sie die
FormPageKlasse:
internal sealed partial class FormPage : ContentPage
{
private readonly SampleContentForm sampleForm = new();
public override IContent[] GetContent() => [sampleForm];
public FormPage()
{
Name = "Open";
Title = "Sample Content";
Icon = new IconInfo("\uECA5"); // Tiles
}
}
Die FormPage ist eine Inhaltsseite, die dem Benutzer ein Formular (SampleContentForm) anzeigt. Es erstellt eine Instanz von SampleContentForm, bei der es sich um ein Formular (später definiert) handelt, das die Benutzeroberfläche und Logik für ein Benutzereingabeformular beschreibt.
- Fügen Sie unten in der Datei (unter der
FormPageKlasse) Folgendes hinzu:
internal sealed partial class SampleContentForm : FormContent
{
public SampleContentForm()
{
TemplateJson = $$"""
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.6",
"body": [
{
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"text": " Sample",
"horizontalAlignment": "center",
"wrap": true,
"style": "heading"
},
{
"type": "Input.Text",
"label": "Name",
"style": "text",
"id": "SimpleVal",
"isRequired": true,
"errorMessage": "Name is required",
"placeholder": "Enter your name"
}
],
"actions": [
{
"type": "Action.Submit",
"title": "Submit",
"data": {
"id": "1234567890"
}
}
]
}
""";
}
public override CommandResult SubmitForm(string payload)
{
var formInput = JsonNode.Parse(payload)?.AsObject();
Debug.WriteLine($"Form submitted with formInput: {formInput}");
if (formInput == null)
{
return CommandResult.GoHome();
}
ConfirmationArgs confirmArgs = new()
{
PrimaryCommand = new AnonymousCommand(
() =>
{
string? name = formInput["Name"]?.ToString();
ToastStatusMessage t = new($"Hi {name}" ?? "No name entered");
t.Show();
})
{
Name = "Confirm",
Result = CommandResult.KeepOpen(),
},
Title = "You can set a title for the dialog",
Description = "Are you really sure you want to do the thing?",
};
return CommandResult.Confirm(confirmArgs);
}
}
SampleContentForm enthält die Formular- und die Übermittlungslogik des Formulars. Das TemplateJson enthält die Formularstruktur und -aktionen. Dieses Beispiel enthält nur eine Texteingabe mit der ID "Name" und eine Aktion zum Senden des Formulars. Die SubmitForm verarbeitet das Analysieren der Nutzlast. Wenn sie ungültig ist, wird der Befehl an die Startseite zurückgegeben, andernfalls wird ein Bestätigungsdialogfeld und eine Toast-Benachrichtigung angezeigt.
-
<ExtensionName>CommandsProvider.csöffnen - Ersetzen Sie
MarkdownPagedurchFormPage.
public <ExtensionName>CommandsProvider()
{
DisplayName = "My sample extension";
Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.png");
_commands = [
+ new CommandItem(new FormPage()) { Title = DisplayName },
];
}
- Stellen Sie Ihre Erweiterung bereit
- In der Befehlspalette,
Reload
Adaptive Karten können komplexere Formulare ausführen, einschließlich der Verwendung eines anderen JSON-Objekts zum dynamischen Erstellen von benutzerdefinierten Formularen. Sie richten ihr Formular zuerst mit dem Designer für adaptive Karten ein und aktualisieren dann ihren Befehl.
- https://adaptivecards.io/designer/ öffnen
- Ersetzen Sie im
CARD PAYLOAD EDITORden JSON-Code durch:
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.6",
"body": [
{
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"text": " ${ParticipantInfoForm.title}",
"horizontalAlignment": "center",
"wrap": true,
"style": "heading"
},
{
"type": "Input.Text",
"label": "Name",
"style": "text",
"id": "Name",
"isRequired": true,
"errorMessage": "Name is required",
"placeholder": "Enter your name"
},
{
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"text": "${Survey.title} ",
"horizontalAlignment": "center",
"wrap": true,
"style": "heading"
},
{
"type": "Input.Toggle",
"label": "Please accept the terms and conditions:",
"title": "${Survey.questions[0].question}",
"valueOn": "true",
"valueOff": "false",
"id": "AcceptsTerms",
"isRequired": true,
"errorMessage": "Accepting the terms and conditions is required"
},
{
"type": "Input.Toggle",
"label": "How do you feel about red cars?",
"title": "${Survey.questions[1].question}",
"valueOn": "RedCars",
"valueOff": "NotRedCars",
"id": "ColorPreference"
}
],
"actions": [
{
"type": "Action.Submit",
"title": "Submit",
"data": {
"id": "1234567890"
}
}
]
}
- Im
SAMPLE DATA EDITORersetzen Sie den JSON-Code durch:
{
"ParticipantInfoForm": {
"title": "Input.Text elements"
},
"Survey": {
"title": "Input Toggle",
"questions": [
{
"question": "I accept the terms and conditions (True/False)"
},
{
"question": "Red cars are better than other cars"
}
]
}
}
Das Designertool sollte etwa wie folgt aussehen:
So fügen Sie diese Inhalte zu Ihrer Erweiterung hinzu:
- Aktuellisiere
TemplateJsonmitCARD PAYLOAD EDITORInhalt - Unter
TemplateJsonhinzufügen:
DataJson = $$"""
{
"ParticipantInfoForm": {
"title": "Input.Text elements"
},
"Survey": {
"title": "Input Toggle",
"questions": [
{
"question": "I accept the terms and conditions (True/False)"
},
{
"question": "Red cars are better than other cars"
}
]
}
}
""";
- Stellen Sie Ihre Erweiterung bereit
- In der Befehlspalette,
Reload
TemplateJson und DataJson zusammenarbeiten, um dynamische, datengesteuerte Formulare zu erstellen.
TemplateJson kann als fhe Form Blueprint und DataJson als dynamische Inhaltsquelle fungieren.
Vollständiges Beispiel
Ein vollständiges Beispiel für die Verwendung von Formularen und Inhaltsseiten finden Sie weiter.SamplePagesExtension/Pages/SampleContentPage.cs
Wichtige Elemente
Definieren Sie das Formularlayout mithilfe der
TemplateJson-Eigenschaft IhrerFormContent. Dies ist die JSON-Nutzlast aus dem CARD PAYLOAD EDITOR in dem https://adaptivecards.io/designer/. Es beschreibt die Struktur und Benutzeroberfläche Ihres Formulars.Binden Sie optional dynamische Daten mithilfe der
DataJsonEigenschaft. Dies ist der JSON-Code aus dem SAMPLE DATA EDITOR im Designer für adaptive Karten. Sie können dynamische Werte mithilfe von ${...}-Platzhaltern in Ihre Karte einfügen, wodurch Ihre Formulare einfacher lokalisiert und verwaltet werden können.Behandeln Sie Formularübermittlungen, indem Sie die
SubmitFormMethode implementieren. Diese Methode wird aufgerufen, wenn der Benutzer das Formular sendet. Sie erhalten die Nutzlast des Formulars als JSON-Zeichenfolge, die Sie analysieren und verwenden können, um Aktionen auszulösen, Bestätigungsdialogen anzuzeigen oder Navigationsergebnisse zurückzugeben.
public override CommandResult SubmitForm(string payload)
{
var formInput = JsonNode.Parse(payload)?.AsObject();
if (formInput == null)
{
return CommandResult.GoHome();
}
// retrieve the value of the input field with the id "name"
var name = formInput["name"]?.AsString();
// do something with the data
// and eventually
return CommandResult.GoBack();
}
Hinweis
Sie können verschiedene IContent Typen in Ihrer Erweiterung kombinieren und abgleichen. Sie können z. B. einen MarkdownContent Block verwenden, um einen Beitrag anzuzeigen, gefolgt von einem FormContent Block zum Sammeln einer Antwort.
Verwandte Inhalte
Windows developer