如何在 Avalonia 中扩展控制?

h4n*_*4nk 5 c# avaloniaui

我想通过一些功能扩展默认下拉列表。自定义下拉列表的行为应类似于文件中的默认下拉列表.xaml,因此应该可以向其中添加项目。

不幸的是,它似乎不像在 WPF 中那样工作。这就是我的方法:

MainWindow.xaml:(添加了命名空间)

<local:myCustomDropDown>
  <DropDownItem>1</DropDownItem>
  <DropDownItem>2</DropDownItem>
</local:myCustomDropDown>
Run Code Online (Sandbox Code Playgroud)

myCustomDropDown.xaml:

<DropDown xmlns="https://github.com/avaloniaui"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          x:Class="AvaloniaApplication2.myCustomDropDown">
</DropDown>
Run Code Online (Sandbox Code Playgroud)

背后代码:

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

    private void InitializeComponent()
    {
        AvaloniaXamlLoader.Load(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎编译时没有错误或警告,但控件不显示。

kek*_*eks 3

您还需要应用 DropDown 的控件样式。您可以通过更改样式键来做到这一点,如下所示:https://github.com/AvaloniaUI/Avalonia/blob/353c24b8abdeaae2a1c543665ef46c2161573e9f/src/Avalonia.Controls/UserControl.cs#L31 :

public class UserControl : ContentControl, IStyleable
{
        Type IStyleable.StyleKey => typeof(ContentControl);
Run Code Online (Sandbox Code Playgroud)

  • 仅链接答案!复制相关部分并将其作为答案的一部分发布,而不是仅仅指向其他网站位置。有关更多信息,请阅读[本主题](https://meta.stackexchange.com/questions/7515/why-is-linking-bad) (4认同)