Primary WinUI APIs:
Primary Avalonia APIs:
| WinUI idiom | Avalonia idiom |
|---|---|
| SwipeControl reveal actions | ContextFlyout/ContextMenu action surface |
| SwipeItem invoked callbacks | MenuItem commands |
| Directional swipe semantics | PullGestureRecognizer + custom threshold logic |
| inline action affordances | templated item with command buttons |
WinUI XAML:
<SwipeControl>
<SwipeControl.RightItems>
<SwipeItems>
<SwipeItem Text="Delete" Invoked="OnDeleteInvoked" />
</SwipeItems>
</SwipeControl.RightItems>
<Grid>
<TextBlock Text="{x:Bind ViewModel.Subject}" />
</Grid>
</SwipeControl>
WinUI C#:
var swipe = new SwipeControl();
var rightItems = new SwipeItems();
rightItems.Add(new SwipeItem { Text = "Archive", Command = ViewModel.ArchiveCommand });
swipe.RightItems = rightItems;
Avalonia XAML:
<Border xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border.GestureRecognizers>
<PullGestureRecognizer PullDirection="RightToLeft" />
</Border.GestureRecognizers>
<Border.ContextFlyout>
<MenuFlyout>
<MenuItem Header="Archive" Command="{Binding ArchiveCommand}" />
<MenuItem Header="Delete" Command="{Binding DeleteCommand}" />
</MenuFlyout>
</Border.ContextFlyout>
<TextBlock Text="{Binding Subject}" />
</Border>
Avalonia C#:
var item = new Border();
item.GestureRecognizers.Add(new PullGestureRecognizer(PullDirection.RightToLeft));
var flyout = new MenuFlyout();
flyout.Items.Add(new MenuItem { Header = "Archive", Command = viewModel.ArchiveCommand });
flyout.Items.Add(new MenuItem { Header = "Delete", Command = viewModel.DeleteCommand });
item.ContextFlyout = flyout;
SwipeControl; compose gesture + flyout patterns.