Найти в Дзене
c3n9

Использование Frame в Avalonia, как в WPF, с FluentAvalonia.UI

В Avalonia нет встроенного аналога Frame, как в WPF, но с использованием FluentAvalonia.UI можно организовать навигацию между страницами, похожую на WPF. Главное отличие — навигация в Avalonia работает через typeof(View). Для работы с Frame подключим FluentAvalonia.UI. Устанавливаем пакет: dotnet add package FluentAvalonia.UI Добавляем пространство имен в XAML: xmlns:fa="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" В MainView.axaml создаем Frame: <fa:Frame x:Name="MainFrame" /> Вызываем навигацию: MainFrame.Navigate(typeof(HomePage)); Здесь HomePage — это обычный UserControl. Для навигации назад так же будет вызывать метод GoBack(); В C# typeof(T) — это оператор, который возвращает объект Type для указанного типа T. Пример: Type type1 = typeof(string); // Получаем Type для string
Type type2 = typeof(int); // Получаем Type для int Когда мы пишем typeof(HomePage), мы передаем сам тип HomePage, а не его экземпляр. Почему это важно? В Frame.Navigate(typeof(Page)) Ava
Оглавление

В Avalonia нет встроенного аналога Frame, как в WPF, но с использованием FluentAvalonia.UI можно организовать навигацию между страницами, похожую на WPF. Главное отличие — навигация в Avalonia работает через typeof(View).

1. Подключение FluentAvalonia.UI

Для работы с Frame подключим FluentAvalonia.UI. Устанавливаем пакет:

dotnet add package FluentAvalonia.UI

Добавляем пространство имен в XAML:

xmlns:fa="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"

2. Добавление Frame и страниц

В MainView.axaml создаем Frame:

<fa:Frame x:Name="MainFrame" />

Вызываем навигацию:

MainFrame.Navigate(typeof(HomePage));
-2

Здесь HomePage — это обычный UserControl.

Для навигации назад так же будет вызывать метод GoBack();

-3

3. Что такое typeof и как он работает

В C# typeof(T) — это оператор, который возвращает объект Type для указанного типа T.

Пример:

Type type1 = typeof(string); // Получаем Type для string
Type type2 = typeof(int); // Получаем Type для int

Когда мы пишем typeof(HomePage), мы передаем сам тип HomePage, а не его экземпляр.

Почему это важно?

В Frame.Navigate(typeof(Page)) Avalonia использует этот Type, чтобы создать новый экземпляр страницы внутри Frame.

То есть, когда вызывается:

MainFrame.Navigate(typeof(SettingsPage));

Frame внутри себя создает объект SettingsPage динамически, без необходимости вручную передавать экземпляр.

Итог

Использование Frame в Avalonia с FluentAvalonia.UI позволяет повторить WPF-стиль навигации, но с особенностью передачи typeof(View).

Поддержка Frame делает Avalonia более привычной для тех, кто работал с WPF, упрощая портирование приложений.