问题标签 [avalonia]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
477 浏览

c# - 在 Avalonia ItemsControl 中根据 ViewModel 类型选择 DataTemplate

内部有带有 ItemsControl 的 UserControl,需要根据 Items 集合元素类型显示具有不同 DataTemplate 的项目。

遵循基于此答案创建的 TemplateSelector 和 XAML(Selecting a DataTemplate based on DataContext property in Avalonia

在运行时出现异常:

Avalonia.Markup.Xaml.XamlLoadException: '没有为 Desktop.Views.Items.Item1View 找到预编译的 XAML,请确保指定 x:Class 并将您的 XAML 文件包含为 AvaloniaResource'

如果在 ItemsControl 而不是<itemsViews:Item1View/>指定<TextBlock Text="{Binding Name}"/>,那么一切正常。但我想将每个项目的标记拆分为具有单独 ViewModel 的单独 XAML 文件。项目可以完全不同。

是否有可能解决这个问题,以便 ItemsControl 将根据 ViewModel 类型选择 DataTemplate?

0 投票
0 回答
835 浏览

c# - 如何获得 Avalonia 窗口的尺寸?

我正在创建一个 C# .NET Core 5 应用程序,该应用程序旨在使用 Avalonia 作为 GUI 在 Windows 10 和 Linux 上运行。我不想使用反应式 api。我不知道如何使用 avalonia 支持的通知系统,所以我决定创建一个单独的窗口,它在顶部停留 X 秒并显示标题和消息。如果用户单击它,窗口会在 X 秒后或更早消失。

这是代码的一部分:

窗口是这样调用的:

“this”指的是主窗口。

XScreenSizeYScreenSize获取屏幕的大小。我试图获取通知窗口的大小以计算其位置,但对我来说似乎是不可能的。 win.Height返回 NaN (同样适用于win.Widthwin.Bounds也无济于事。对于win.ClientSize. 我已经尝试了所有与我相关的属性,但我无法获得新窗口的大小。有什么方法可以在这两个操作系统中工作吗?

我想这应该很明显,但我也在为通知窗口添加 xaml 文件:

0 投票
1 回答
271 浏览

reactiveui - Avalonia + ReactiveUI - Events() 生成的药剂师

我正在尝试总体上了解 Avalonia,尤其是 Reactive UI 集成。通过谷歌搜索,我了解到 Avalonia 取消了对 ReactiveUI 中的 Avalonia 支持,并尝试将 ReactiveUI 集成到 Avalonia 本身,以支持有时不稳定的 Avalonia API。

我正在实现一个流程,双击 DataGrid 行应该打开一个详细信息窗口,我可以通过在后面的代码中为 DoubleTapped 事件添加一个处理程序来做到这一点。但是,我想知道是否可以通过观察 DoubleTapped 事件以反应式 UI 方式在 WhenActivated() 实现中执行此操作。

在 ReactiveUI 文档中,我看到有一个 Pharmacist 集成,它为这些事件生成 observables。但是,当我在后面的代码中获取对 DataGrid 的引用并尝试通过 DoubleTapped 挂钩时 myDataGrid.Events(). ...,我看不到任何事件。这是否意味着目前 Avalonia 没有这种支持?

最后,当我在处理它时,如果我忘记了响应式 UI 支持,并使用了直接的事件处理程序,我需要做一些事情来检测它是被双击的行,还是其他的东西(比如作为标题)。我必须这样做,因为据我了解,Avalonia 中没有 EventSetter 实现。

谁知道 Avalonia 将来是否会支持这个?

编辑:最后我使用的 ReactiveUI 有点类似于

0 投票
1 回答
702 浏览

xaml - 在 Avalonia 中设置窗口图标

我正在为一个学校项目编写一个小应用程序,但我不知道如何更改窗口图标。我找到了 Window 的“图标”属性,但我不知道它是如何工作的,因为我几乎没有找到关于它的文档。当我尝试在该字段中输入内容时,它抛出了一个错误,即找不到资源。我也阅读了有关导入资源的内容,但这是我的第一个此类应用程序,所以我完全迷路了。非常感谢任何帮助,谢谢

0 投票
2 回答
88 浏览

datagrid - Avalonia DataGrid 输入处理

我正在使用Avalonia.Controls.DataGrid. 默认情况下,当网格获得焦点并按下 Enter 时,它会自动处理事件并将选择移动到下一个项目。如何防止这种默认行为?我想要一个自定义的 Enter KeyDown 处理程序。

0 投票
1 回答
383 浏览

titlebar - Avalonia:在 Linux 上隐藏标题栏窗口不起作用

我正在使用 avalonia(版本 0.10.3 - 但同样发生在 0.10.0 - 在 Net5.0 项目上)作为项目的 UI,当我创建例如启动画面或关于屏幕时,标题栏必须是无形的。

在 Windows 上,使用窗口部分中的这些参数可以正常工作:

不幸的是,在 Linux 上(mint - 带有最新更新的最新版本),标题栏仍然可见(如果我设置 ExtendClientAreaTitleBarHeightHint="-1")。

这是一个已知问题还是我做错了什么?

我没有mac,但是mac也是这样吗?

0 投票
1 回答
101 浏览

c# - TaskCompletionSource 而不是线程安全库

我有 C# avalonia应用程序通过开发人员提供的 SDK 使用了一些非线程安全的库。更具体地说是Windows Zoom SDK。一些 SDK 功能是基于事件驱动模式构建的。调用 SDK 方法后,应用程序必须等待执行结果回调到达。因此,使用 TaskCompletionSource 在应用程序中应用了基于任务的异步模式(请参见下面的代码)。

在应用程序中应用 async/await 模式后,SDK 无法正常工作(详情)。但是,这个问题没有讨论使用 Zoom SDK。问题是关于 async/await 模式的使用如何可能导致某些非线程安全库(或 SDK)的错误行为?

SDK包装方法:

SDK 回调处理程序:

高级代码:

0 投票
1 回答
38 浏览

avalonia - In WPF, when visibility is set to Collapsed, the control will not occupy the original location. How can this be archieve in Avalonia

I want to hide a control in Avalonia, and then the space occupied by this control will be occupied by adjacent controls, just like the visibility.Collapsed in WPF.

0 投票
1 回答
60 浏览

wpf - 如何跟踪 ItemsControl 的哪个元素导致 ContexMenu 打开?

在我的图书编辑器应用程序中,我需要按层次顺序显示主题和子主题,所以我做了这样一个标记:

也许标记不是很清楚,但关键是我有外部 ItemsControl 和内部的。外部项目具有结构:按钮(主题名称)+ 内部 ItemsControl,它也将子主题的名称显示为按钮。这是屏幕截图:
在此处输入图像描述

每个 ItemsControl 都有自己的 ContextMenu,但我无法正确绑定它们。我希望“重命名”MenuItems 绑定到 Button.Content 的 Button 右键单击​​导致菜单打开。我应该怎么做?
我正在使用 MVVM Avalonia,但我希望在 WPF 中它的工作方式相同,以便我可以将 WPF 主题标签添加到这个问题中。

0 投票
0 回答
171 浏览

c# - 绑定到 Avalonia 中的集合时如何进行折线更新

我正在尝试将 a 链接Polyline到Avalonia MVVM 应用程序中的 a ObservableCollectionof Points,并且我能够让它很好地显示点的初始集合,但是当集合更新时,折线不会显示任何更改。

首先,我尝试使用ReactiveUI的 RaisePropertyChanged 函数,当我有一个文本块或其他可以显示文本的控件时,它可以正常工作,但它实际上并没有更新折线。所以接下来我尝试了像这样实现 INotifyPropertyChanged 的​​ WPF 方法:

(从绑定到 ObservableList<Point> 的折线不刷新
Database.GetPoints()返回一个IEnumerable<Point>
并通过调用 PCollection 实例的 NotifyPropertyChanged 函数来通知更改,但在页面最初加载后,这同样不会影响折线。

我发现的其他结果涉及从代码中访问和更新绑定本身,而这对于 MVVM 是不可能的。

我也遇到了这个与 Avalonia 非常相关的问题线程,但我不知道如何利用那里发布的“简单修复”,或者即使不编辑 Avalonia 自己的代码也可以。

相关代码片段: 我的部分视图包含折线和一个按钮,该按钮在画布中创建一个随机点CanvasView.axaml

视图模型的一部分CanvasViewModel.cs

Database.GetPoints()返回一个IEnumerable<Point>