问题标签 [avaloniaui]

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 回答
323 浏览

c# - 在 .NET Core 上的 Studio Code 中找不到 ICollectionView

我有 aXAML和 aMVVM显示 aDataGridObservableCollection. 所有工作正常(我以前的更多细节,已经由我自己回答,问题)。

现在我正在尝试添加一个过滤器,我想关注@mark-heath tutorial

我的项目构建引发以下

即使我确实包含了记录在案的命名空间

而是显示哪个 Studio Code Unnecessary using directive。我的 .csproj 在 .NET Core 3.0 上

该问题似乎与我如何添加程序集引用有关。

它使用 .NET Framework 恢复包,但可能这是错误的,因为我在 .NET Core 和Linux上。

哪个是正确的方法?除了“你不能那样做”的答案......也许还有另一个等效的包要添加......来自Avalonia UI?有谁知道或用过吗?

在 Avalonia UI github 上搜索并在 gitter 上询问

我看到有一个已经关闭的github 问题,所以现在可能有解决方案吗?(我也在询问 Avalonia UI gitter 频道

0 投票
0 回答
435 浏览

macos - How can I render a set of primitives using Avalonia and Skia backend on macos?

I need to create a simple app to draw a graph network onto a canvas. As I use .net core it seems that one of the best solutions could be Avalonia + Skia backend. The problem is that I haven't found any good documentation or example showing it.

How could I render a set of primites using Avalonia and Skia render backend?

0 投票
1 回答
544 浏览

avaloniaui - ViewLocator 生成的视图在何处以及如何分配其 DataContexts(在 Avalonia 的 Todo 教程应用程序中)?

在完成的 Avalonia 教程 Todo 应用程序中 --- TodoListView 和 AddItemView 在哪里以及如何获取它们的 DataContexts 以分别等于 TodoListViewModel 和 AddItemViewModel ???
我的意思是他们的父控件 MainWindow 的 DataContext 是一个 MainWindowViewModel 实例(在 App.xaml.cs 文件中分配)---而 MainWindow 的 Content 属性绑定到 MainWindowViewModel 的 Content 属性(在执行期间它确实获得了视图模型的分配实例)。我只是无法追踪 TodoListView 和 AddItemView 获取其 DataContexts 的来源。他们是否在以下情况下得到它:

  1. 由 ViewLocator 在运行时创建?-- 但这是不可能的,因为在 ViewLocator 返回 View 实例之前,新实例化的 View 的 DataContext 属性仍然为 NULL -- 如已完成应用程序中以下代码的输出所示(if 块中的代码由我产生所需的输出):
  1. 或者他们得到父 Window 分配的 DataContext ?--- 但是父窗口自己的 DataContext 是 MainWindowViewModel ----- 我们如何从 MainWindowViewModel 到 TodoListViewModel 或 AddItemViewModel ???

简而言之,我不清楚在运行时通过 ViewLocator 生成的视图在哪里分配了它们的 DataContext 属性。


总结一下我从答案和一些搜索和游戏中理解的内容:


如果 ContentControl(在本例中为 Window)的 Content 属性是 Control,则 Control 只需从父 ContentControl 继承 DataContext。但是如果ContentControl的Content属性是non-Control,那么ContentControl的ContentPresenter首先会为non-Control找到一个数据模板,这样就可以生成一个子View,然后将自己的DataContext设置为non-Control。这个新分配的 DataContext 然后被新生成的子 View 继承。呸呸呸!

0 投票
1 回答
3110 浏览

c# - Avalonia:将命令属性绑定到 UserControl

所以我创建了一个自定义按钮控件,我们称之为MyButton,使用 Avalonia。MyButton是多个控件的集合,包括Avalonia.Controls.Button如下所示 ( MyButton.xaml):

(是的,我的自定义控件继承自Avalonia.Controls.Border而不是Avalonia.Controls.UserControl

我的计划是进一步向上传递按钮Command属性(具有属性的x:Name="button"属性)并使其可通过MyButton.

因此,当我想在中使用MyButton时,MainWindow.xaml我将能够执行以下操作:

视图模型MainWindowViewModel.cs如下所示:

我尝试这样做的方式MyButton.xaml.cs如下:

但是,当运行应用程序并单击按钮时,目标方法MyButton_Click永远不会执行。附加调试器似乎MyButton.Command也从未执行过设置器,我认为这是由于不正确的绑定?(调试控制台上没有绑定错误或与此相关的任何内容)

经过几个小时的反复试验,我找到了一种OnClick()button元素上使用反射和自定义事件处理程序的解决方法。它可以工作,但有点难看,需要一个静态目标方法,所以我的问题是:

如何正确地将 UserControl 上的命令绑定到主窗口的 ViewModel 中包含的方法?

另外:我的基于反射的方法也可行吗?(我假设 Avalonia 绑定也以某种方式基于反射?)

0 投票
1 回答
1792 浏览

skiasharp - 是否可以在 Avalonia 应用程序中创建 Skia Canvas 元素?

我希望将 Electron 应用程序移植到 Avalonia。该应用程序目前使用 Paper.js 来绘制和管理与复杂多边形的交互。查看 Avalonia,我注意到它使用了 Skia,它似乎提供了与 Paper.js 大致相同的功能。我希望有一种简单的方法可以创建 Skia“画布”并直接使用 SkiaSharp API。

不幸的是,我没有太多运气找到文档/答案。avalonia gitter 上的某个人提到我可能会使用 RenderTargetBitmap,但是在查看源代码(找不到任何文档)之后,我认为直接使用 Skia 画布会更容易/更优雅。

这可能吗?

0 投票
1 回答
488 浏览

f# - 如何对滑块的值更改事件做出反应?

Avalonia 的滑块的问题是它没有ValueChange事件,所以我不确定在这里做什么:

这是我要处理事件的地方,但我注释掉的行类型不正确。我应该在PropertyChanged这里使用,对吗?如果是这样,我如何检查哪个属性特别发生了变化?

0 投票
1 回答
45 浏览

f# - 如何在不擦除内容的情况下设置按钮的名称?

取消注释以下行将导致上述示例无法正常运行:

内容将被擦除,只会创建一个空按钮,并且不会响应点击事件。WPF 中的类似程序可以正常工作。该Name属性在 Avalonia 中的作用是否与在 WPF 中的作用不同?这里应该做什么?

0 投票
0 回答
120 浏览

c# - Avalonia MVVM:拆分大型 xaml 文件

我正在使用 Avalonia UI 开发一个相当大的单窗口应用程序,使用Carousel控件在页面之间切换。正如所料,我的MainWindow.xaml文件变得非常大。它目前大约有 600 行代码,只完成了一小部分 UI,我认为是时候重构了。我已经UserControl在存在冗余代码的地方使用了 s。

所以我想知道:缩小主窗口 xaml 文件大小的最佳方法是什么?

由于我使用的是 Avalonia 的 MVVM 版本(我认为还有另一个项目模板,如果我错了,请纠正我)我还必须担心如何处理我的所有绑定MainWindowViewModel.cs(我通过使类部分进行清理)并将其拆分为多个文件,每个文件都包含我的一个Carousel选项卡的代码)。

我目前的计划是将每个Carousel页面外包到一个单独的页面中UserControl,然后以某种方式Carousel通过绑定和 Avalonia 属性将引用传递给父页面,以便能够在我的后端页面之间切换,并希望找到一种方法来做到这一点,同时遵守 MVVM 和不会弄乱所有绑定。

我相信这会自己产生新的问题,并且重写会相当痛苦,所以我想我可能不是第一个在一个有点大的项目中使用 Avalonia 的人。那么我的方法有更好的选择吗?

我听说过,StyleInclude但无法找到关于它的作用、工作原理以及何时使用的全面文档。

0 投票
2 回答
169 浏览

c# - DataGridCheckBoxColumn 用法——抛出未处理的异常

当 DataGridCheckBoxColumn 在 DataGrid 中使用并绑定到支持模型中的布尔属性时,会发生这种情况。当单击该列并且选中/取消选中复选框时——它的行为符合预期——但是当我关闭主窗口时,抛出异常。当仅使用文本列并与之交互时,不会发生这种情况。如果我根本不与复选框列交互而只是关闭窗口,它也不会发生。只有在与复选框列交互后关闭窗口时才会发生这种情况。

开发环境:

操作系统:
1. Arch Linux、Gnome 3、Wayland。
2.Windows 10 专业版

开发:
dotnet core 3.1.103
IDE:VS Code

重现步骤:

使用 DataGrid 的一般过程在教程文章中提到: Avalonia DataGrid Getting Started

我对文章所做的唯一更改是将 DataGridCheckBoxColumn 添加到 DataGrid 并将布尔值 IsChecked 属性添加到教程中使用的“Person”模型类——然后将两者绑定在一起。

所以关键步骤是:

  1. $ dotnet new avalonia.mvvm
  2. 在 *csproj 文件中,将所有 Avalonia 的版本包括到 0.9.10,因为这就是我正在使用的 DataGrid 的版本。
  3. $ dotnet add package Avalonia.Controls.DataGrid
  4. 在 App.xaml 中,添加样式:
    <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Default.xaml"/>
  5. 将以下属性添加到模型类“Person” --- 其余代码保持不变,并按照链接教程:
  1. 将 DataGridCheckBoxColumn 添加到 DataGrid 并将其绑定如下所示(其余列保持不变,按照链接教程):
  1. 然后,当我运行应用程序(从命令行或 vscode)时——GUI 会按预期显示——包含所有列和值——并且通常会显示额外的复选框列。__ 当我单击复选框列时——复选框确实按预期被选中和取消选中(尽管需要额外单击一次)。 但是当我通过单击右上角的“X”关闭窗口时——那是未处理的异常发生的时候——而不是在那之前。

完整的异常文本:

未处理的异常。System.InvalidOperationException:集合已修改;枚举操作可能无法执行。在 System.Collections.Generic.List`1.Enumerator.MoveNextRare() 在 Avalonia.Collections.AvaloniaList`1.Enumerator.MoveNext() 在 System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)+MoveNext() 在Avalonia.Visual.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs e) 在 Avalonia.Input.InputElement.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs e) 在 Avalonia.Controls.Control.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs e) 在 Avalonia.Visual.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs e) 在 Avalonia.Input.InputElement。 Avalonia.Controls.Control 的 OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs e)。

Person 类的代码:

MainWindowViewModel 的代码充当 MainWindow 背后的代码,并使用上面的 Person 类来托管 ObservableCollection 并将其公开为名为 People 的公共属性。DataGrid 绑定到这个作为 Person 类集合的 People 属性(谁的属性由不同的列表示,例如 DataGridTextColumn 和 DataGridCheckBoxColumn):

更新:我已经放弃寻找解决方案。这是我的工作:

而不是使用 DataGridCheckBoxColumn (它还有一个额外的烦恼,即仅在单击两次时才被检查——我正在使用 DataGridTemplateColumn。它解决了上述异常问题——以及我想要的单击一次检查的属性。

0 投票
1 回答
269 浏览

c# - 无法使用反射实例化此委托

我需要将特定委托作为参数传递给我无法更改的方法。委托是“ System.Windows.Interop.HwndSourceHook ”,它是 PresentationCore.dll 的一部分。它必须是那个委托,它不能是具有相同签名的通用委托。而且 AFIAK 您不能将代表从一种类型转换为另一种类型。

这是委托的方法:

在编译时加载程序集时一切正常。但是,我将项目移植到 Avalonia 框架,并且必须在运行时加载这个特定的程序集,所以我必须使用反射。

我认为这应该工作......

...但最后一行抛出:

System.ArgumentException:“无法绑定到目标方法,因为它的签名与委托类型的签名不兼容。”

即使签名是正确的。