Comment créer une bibliothèque de contrôles personnalisés
Ce guide vous montre comment créer une bibliothèque de contrôles personnalisés et la référencer pour une utilisation dans une application Avalonia UI.
Dans cet exemple, un fichier de contrôle personnalisé est ajouté à une bibliothèque de classes .NET. La bibliothèque a le package NuGet Avalonia UI installé :
- XAML
- C#
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cc="clr-namespace:CCLibrary;assembly=CCLibrary"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="AvaloniaCCLib.MainWindow"
Title="AvaloniaCCLib">
<Window.Styles>
<Style Selector="cc|MyCustomControl">
<Setter Property="Background" Value="Yellow"/>
</Style>
</Window.Styles>
<cc:MyCustomControl Height="200" Width="300"/>
</Window>
using Avalonia;
using Avalonia.Controls;
using Avalonia.Media;
namespace CCLibrary
{
public class MyCustomControl : Control
{
public static readonly StyledProperty<IBrush?> BackgroundProperty =
Border.BackgroundProperty.AddOwner<MyCustomControl>();
public IBrush? Background
{
get { return GetValue(BackgroundProperty); }
set { SetValue(BackgroundProperty, value); }
}
public sealed override void Render(DrawingContext context)
{
if (Background != null)
{
var renderSize = Bounds.Size;
context.FillRectangle(Background, new Rect(renderSize));
}
base.Render(context);
}
}
}
Notez que la référence de l'espace de noms pour la bibliothèque de contrôles inclut le nom de l'assemblage.
Définitions des espaces de noms XML
Lorsque vous ajoutez une référence à une bibliothèque de contrôles dans un fichier XAML Avalonia UI, vous pouvez vouloir utiliser le format d'identification par URL. Par exemple :
xmlns:cc="https://my.controls.url"
Ceci est possible grâce à la présence de définitions d'espaces de noms XML dans une bibliothèque de contrôles. Celles-ci mappent les URL aux espaces de noms de code et se trouvent dans le fichier Properties/AssemblyInfo.cs du projet. Par exemple :
[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia")]
Vous pouvez voir cela dans le code source des contrôles intégrés Avalonia UI ici.
Définitions d'espaces de noms courants
Vous pouvez également faire en sorte qu'une URL map plusieurs espaces de noms dans votre bibliothèque de contrôles. Pour ce faire, ajoutez simplement plusieurs définitions d'espaces de noms XML qui utilisent la même URL, mais qui mappent à différents espaces de noms de code, comme ceci :
using Avalonia.Metadata;
[assembly: XmlnsDefinition("https://my.controls.url", "My.NameSpace")]
[assembly: XmlnsDefinition("https://my.controls.url", "My.NameSpace.Other")]