Search code examples
c#avaloniaui

How to extend a Control in Avalonia?


I want to extend the default dropdown with some functionality. The custom dropdown should behave like a default dropdown in the .xaml file, so it should be possible to add items to it.

Unfortunately, it does not seem to work like in WPF. That's my approach:

MainWindow.xaml: (added the namespace)

<local:myCustomDropDown>
  <DropDownItem>1</DropDownItem>
  <DropDownItem>2</DropDownItem>
</local:myCustomDropDown>

myCustomDropDown.xaml:

<DropDown xmlns="https://github.com/avaloniaui"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          x:Class="AvaloniaApplication2.myCustomDropDown">
</DropDown>

Code behind:

public class myCustomDropDown : DropDown
{
    public myCustomDropDown()
    {
        this.InitializeComponent();
    }

    private void InitializeComponent()
    {
        AvaloniaXamlLoader.Load(this);
    }
}

This seems to compile without errors or warnings, but the control does not show.


Solution

  • You need to also apply DropDown's control styles. You can do that by changing the style key like this: https://github.com/AvaloniaUI/Avalonia/blob/353c24b8abdeaae2a1c543665ef46c2161573e9f/src/Avalonia.Controls/UserControl.cs#L31 :

    public class UserControl : ContentControl, IStyleable
    {
            Type IStyleable.StyleKey => typeof(ContentControl);