如何在 Avalonia 中扩展控制?

Posted

技术标签:

【中文标题】如何在 Avalonia 中扩展控制?【英文标题】:How to extend a Control in Avalonia? 【发布时间】:2019-01-15 17:12:03 【问题描述】:

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

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

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

<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>

背后的代码:

public class myCustomDropDown : DropDown

    public myCustomDropDown()
    
        this.InitializeComponent();
    

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

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

【问题讨论】:

【参考方案1】:

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

public class UserControl : ContentControl, IStyleable

        Type IStyleable.StyleKey => typeof(ContentControl);

【讨论】:

仅链接回答!复制相关部分并将它们作为您的答案的一部分发布,而不是仅仅指向其他 Web 位置。欲了解更多信息,请阅读this topic @kekekeks 鉴于一些引用的 myget 存储库正在关闭(并且不再可访问),您能否解释一下您的答案?我知道在 GitHub 世界中,深度链接 20 个项目是“可以接受的”......但是,由于其中一个 F# 测试项目需要不再存在的引用,因此无法再构建 AvalonStudio 的源代码。因此,为什么在 StackExchange 上,EVERYONE 指向链接只会回答和尖叫 Mateusz 所说的话。因为引用的链接失效了,答案就没有了;有点像 github 项目,在 covid 时代具有断开的链接依赖项。 :P

以上是关于如何在 Avalonia 中扩展控制?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Avalonia 中绑定颜色

如何在 Avalonia.ReactiveUI 中使用 Autofac 作为 DI 容器?

如何在 Avalonia 应用程序中为 OpenFolderDialog 设置标题?

Avalonia:如何使用代码为路径中的点设置动画

如何在代码中制作与 Avalonia UI 兼容的位图?

Avalonia - 如何像 OneNote 桌面 UI 一样垂直放置 Tab 控件的选项卡