Primary WinForms APIs:
OpenFileDialog, SaveFileDialog, FolderBrowserDialogColorDialog, FontDialogForm.ShowDialog()Primary Avalonia APIs:
TopLevel.GetTopLevel(...)IStorageProvider (OpenFilePickerAsync, SaveFilePickerAsync, OpenFolderPickerAsync)Window.ShowDialog(owner)| WinForms | Avalonia |
|---|---|
OpenFileDialog |
StorageProvider.OpenFilePickerAsync |
SaveFileDialog |
StorageProvider.SaveFilePickerAsync |
FolderBrowserDialog |
StorageProvider.OpenFolderPickerAsync |
ShowDialog() |
await window.ShowDialog(owner) |
ColorDialog / FontDialog |
custom dialog with ColorPicker/font chooser UI |
WinForms C#:
using var open = new OpenFileDialog { Filter = "Images|*.png;*.jpg" };
if (open.ShowDialog(this) == DialogResult.OK)
{
LoadImage(open.FileName);
}
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:FilesViewModel">
<StackPanel Spacing="8">
<Button Content="Open Image" Command="{CompiledBinding OpenImageCommand}" />
<TextBlock Text="{CompiledBinding SelectedPath}" />
</StackPanel>
</UserControl>
using Avalonia.Controls;
using Avalonia.Platform.Storage;
public async Task OpenImageAsync(Control anchor)
{
var top = TopLevel.GetTopLevel(anchor);
if (top is null || !top.StorageProvider.CanOpen)
return;
var files = await top.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
{
Title = "Open Image",
AllowMultiple = false,
FileTypeFilter = new[]
{
new FilePickerFileType("Images") { Patterns = new[] { "*.png", "*.jpg", "*.jpeg" } }
}
});
var selected = files.Count > 0 ? files[0] : null;
if (selected is not null)
viewModel.SelectedPath = selected.Path.ToString();
}
Modal dialog example:
var dialog = new Window { Width = 360, Height = 220, Title = "Confirm" };
if (TopLevel.GetTopLevel(anchor) is Window owner)
await dialog.ShowDialog(owner);
await rather than blocking UI thread.