Primary WinForms APIs:
PrintDocumentPrintPreviewDialogPrimary Avalonia patterns:
| WinForms | Avalonia |
|---|---|
PrintDocument.PrintPage |
render/export document content in app services |
PrintPreviewDialog |
in-app preview control/window over exported model |
PrintDialog direct OS print flow |
external package/platform-specific integration |
| synchronous print flows | async save/export + launch workflows |
Avalonia core does not provide a direct built-in PrintDocument/PrintPreviewDialog equivalent.
WinForms C#:
var doc = new PrintDocument();
doc.PrintPage += (_, e) => e.Graphics.DrawString(reportText, Font, Brushes.Black, 20, 20);
using var preview = new PrintPreviewDialog { Document = doc };
preview.ShowDialog(this);
Avalonia XAML:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:MyApp.ViewModels"
x:DataType="vm:ReportViewModel">
<StackPanel Spacing="8">
<Button Content="Preview Report"
Command="{CompiledBinding PreviewReportCommand}" />
<Button Content="Export Report"
Command="{CompiledBinding ExportReportCommand}" />
</StackPanel>
</UserControl>
using System.IO;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Platform.Storage;
public static async Task ExportReportAsync(TopLevel topLevel, string reportText)
{
var file = await topLevel.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
{
Title = "Export Report",
SuggestedFileName = "report.txt",
FileTypeChoices = new[]
{
new FilePickerFileType("Text") { Patterns = new[] { "*.txt" } }
}
});
if (file is null)
return;
await using var stream = await file.OpenWriteAsync();
await using var writer = new StreamWriter(stream);
await writer.WriteAsync(reportText);
await topLevel.Launcher.LaunchFileAsync(file);
}