Primary WinUI APIs:
Primary Avalonia APIs:
| WinUI idiom | Avalonia idiom |
|---|---|
| FileOpenPicker/PickSingleFileAsync | StorageProvider.OpenFilePickerAsync |
| FileSavePicker/PickSaveFileAsync | StorageProvider.SaveFilePickerAsync |
| FolderPicker/PickSingleFolderAsync | StorageProvider.OpenFolderPickerAsync |
| Launcher.LaunchUriAsync | Launcher.LaunchUriAsync |
| Launcher.LaunchFileAsync(StorageFile) | Launcher.LaunchFileAsync(IStorageItem) |
WinUI XAML:
<StackPanel Spacing="8">
<Button Content="Open JSON" Click="OpenJson_Click" />
<Button Content="Open Docs" Click="OpenDocs_Click" />
</StackPanel>
WinUI C#:
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".json");
StorageFile? file = await picker.PickSingleFileAsync();
if (file is not null)
await Launcher.LaunchFileAsync(file);
await Launcher.LaunchUriAsync(new Uri("https://docs.avaloniaui.net"));
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 JSON" Command="{CompiledBinding OpenJsonCommand}" />
<Button Content="Open Docs" Command="{CompiledBinding OpenDocsCommand}" />
</StackPanel>
</UserControl>
Avalonia C#:
TopLevel? top = TopLevel.GetTopLevel(this);
if (top is null)
return;
var files = await top.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
{
AllowMultiple = false,
FileTypeFilter = new[]
{
new FilePickerFileType("JSON") { Patterns = new[] { "*.json" } }
}
});
if (files.Count > 0)
await top.Launcher.LaunchFileAsync(files[0]);
await top.Launcher.LaunchUriAsync(new Uri("https://docs.avaloniaui.net"));
TopLevel at interaction time and use its StorageProvider/Launcher.