Blazor-Tutorial

Komponenten einer Razor-Klassenbibliothek mit Parametern, ChildContent Render-Fragmenten, Attribute-Splatting und einem bUnit-Test pro Komponente.

Was du baust

Ein kleines Kontaktformular — beschriftetes Eingabefeld, Absenden-Schaltfläche, @bind-Value -Bindung, echtes Tastatur- und Screenreader-Verhalten — zuerst nackt, dann gestaltet, in etwa 10 Minuten.

Bevor du anfängst

Du brauchst git und das .NET SDK 8 oder neuer. Jedes Blazor-Projekt funktioniert — Blazor Web App, Server oder WebAssembly.

Schritt 1 — Den Code holen

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-blazor-headless
dotnet build
dotnet test      # bUnit — 1,400+ cases across the catalog

Die Komponenten liegen in src/LilyBlazorHeadless/Components/ — Button.razor, TextInput.razor — je eine Razor-Datei. Referenziere das Projekt (oder kopiere die Dateien) aus deiner Blazor-App und füge @using LilyBlazorHeadless.Components zu _Imports.razor.

Schritt 2 — Deine erste Komponente

<Button OnClick="Save">Save</Button>

Rendert <button class="button">. Die gemeinsamen Parameterkonventionen: Label (ein aria-label zum Überschreiben), CssClass (wird an den Basis-Hook angehängt), ChildContentund [Parameter(CaptureUnmatchedValues = true)] Attribute-Splatting, sodass jedes zusätzliche HTML-Attribut durchgereicht wird.

Schritt 3 — Ein kleines Formular zusammensetzen

<Form OnSubmit="HandleSubmit">
  <Field Label="Full name" Required="true">
    <TextInput Id="name" Label="Full name" @bind-Value="name" Required="true" />
  </Field>
  <Button Type="submit">Save</Button>
</Form>

@code {
  private string name = "";
}

Field nimmt das sichtbare Label als eigenen Parameter entgegen statt als verschachtelte Label-Komponente — gib es einmal an, bei Fieldund TextInputvon Label liefert den zugänglichen Namen.

Geprüft am 2026-08-29: ein früherer Entwurf verschachtelte eine separate Label -Komponente in Field, was zwei Labels (eines leer) rendert, weil Field bereits ein eigenes aus dem Label -Parameter — durch Prüfen des Komponenten-Quellcodes entdeckt; Form selbst hat keinen Label -Parameter, daher wurde die <Form> -Verwendung des früheren Entwurfs korrigiert und ohne sie belassen, statt ein nicht existierendes Attribut zu erfinden. Die zusammengesetzte Kontaktformular-Route ist dasselbe Muster, getestet mit echten e2e- und axe-Tests.

Prüfe deine Arbeit: Starte die App, und das Formular sieht schlicht aus — genau wie beabsichtigt: Die Gestaltung kommt noch. Drücke Tab: Der Fokus wandert durch jedes Bedienelement, das Label wird angesagt und das Absenden funktioniert. Das Verhalten ist fertig; das Aussehen gehört dir und kommt als Nächstes.

Schritt 4 — Gestalten

Gestalte die Klassen-Hooks — .button, .text-input, .label, .field — in app.css, oder binde ein fertiges Theme ein in App.razor / index.html:

<link rel="stylesheet" href="themes/wireframe.css" />

Schritt 5 — Alles in Aktion sehen

Blazor-Web-Beispiel-App zeigt den vollständigen Katalog gestaltet und demonstriert, mit Playwright-e2e-Tests:

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-blazor-web-examples
dotnet run --project src/LilyBlazorWebExamples

Nächste Schritte

  • Theming — Umschalten zur Laufzeit mit dem Blazor-Helper theme-picker (eine Razor-Klassenbibliothek auf NuGet).
  • Einstellungs-Helper — Sprache und Textgröße.
  • Komponentenkatalog — Props, ARIA und Tastatur pro Komponente.

Fragen unterwegs? Die Hilfeseite steckt voller Antworten — und wenn ein Schritt klarer sein könnte, sag es uns und wir verbessern das Tutorial gern.