UraniumContentPage
This is the main page for the Uranium Content system. It has some infrastructure for building user interface with Uranium UI components.
Setting-up
There are 2 ways to create a Uranium Content page. The first is to create from template with dotnet CLI. The second is to create from scratch.
Creating with CLI
UraniumUI templates are packed in UraniumUI.Template NuGet package. If you haven't install it, run the following command in the terminal.
dotnet new -i UraniumUI.Templates
Then create a new ContentPage with the following command.
dotnet new uraniumcontentpage -n MyPage -na MyNamespace
-na
parameter represents the namespace of the page. If you don't specify it, dotnet CLI can't find your namespace and it'll beMauiApp1
by default. If you're creating with Visual Studio, you don't have to specify a namespace. IDE will automatically send that parameter.
Creating from scratch
Create a Content Page (XAML) and replace ContentPage with UraniumContentPage.
<uranium:UraniumContentPage x:Class="App1.MainPage" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:uranium="clr-namespace:UraniumUI.Pages;assembly=UraniumUI" xmlns:local="clr-namespace:App1"> <!-- Content here --> </uranium:UraniumContentPage>
Make sure C# class also inherits from
UraniumContentPage
public partial class MainPage : UraniumContentPage { public MainPage() { InitializeComponent(); } }
Attachments
Attachments is a feature of UraniumContentPage that allows you to add attachments to your content page. Attachments must implement IPageAttachment
interface. That interface also implements IView
. So, attachments are View that implements IPageAttachments
. Different UI packs can include different attachments.
Attachments aren't same layer with page content and they will automatically rendered over the page. You should place them in a position or use LayoutOptions to align them. When multiple attachments are added to the page, they will be rendered in the order they are added. So, the attachment at the end will be rendered at the front.
<uranium:UraniumContentPage x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:uranium="clr-namespace:UraniumUI.Pages;assembly=UraniumUI"
xmlns:local="clr-namespace:App1">
<!-- Content here -->
<uranium:UraniumContentPage.Attachments>
<!-- Attachments here -->
</uranium:UraniumContentPage.Attachments>
</uranium:UraniumContentPage>
IPageAttachment
IPageAttachment
is an interface and contains 2 members that you should implement.
OnAttached(UraniumContentPage attachedPage)
: A mothod that is executed right after attachment is added to the page. You can use this method to initialize your attachment.AttachmentPosition
: A property you should return either ofFront
orBehind
enum value. This property determines the position of the attachment.Front
: The attachment will be rendered at the front.Behind
: The attachment will be rendered at the back of the entire page. In the behind case, your attachment will not be appeared, you should make something like making the main page content transparent or slide it away to show the attachment according to your logic.
Creating an attachment
You can either create an attachment with XAML or C# code.
- Creating a simple Floating Action Button attachment
public class FAB : ImageButton, IPageAttachment
{
public FAB()
{
this.Source = new Uri("arrow.png");
this.Width = 42;
this.Height = 42;
this.CornerRadius = 21;
this.BackgroundColor = Colors.Blue;
this.Click += (s, e) =>{ Console.WriteLine("FAB clicked"); };
}
public AttachmentPosition AttachmentPosition => AttachmentPosition.Front;
public void OnAttached(UraniumContentPage page)
{
// Place it right bottom of the page.
this.TranslationX = this.PageWidth - this.Width - 20;
this.TranslationY = this.PageHeight - this.Height - 20;
}
}
- Using it in XAML
<uranium:UraniumContentPage x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:uranium="clr-namespace:UraniumUI.Pages;assembly=UraniumUI"
xmlns:local="clr-namespace:App1">
<!-- Content here -->
<uranium:UraniumContentPage.Attachments>
<local:FAB />
</uranium:UraniumContentPage.Attachments>
</uranium:UraniumContentPage>