学无先后达者为师!
不忘初心,砥砺前行。

Avalonia 应用如何为非按钮控件绑定点击命令?

在 Avalonia 项目中,某些控件比如 Border 是没有 Command 命令的。如果想要 Border 被点击时触发 ViewModel 中的 Command,则必须做一些额外的工作。

和 WPF 不同,在 Avalonia 中鼠标点击元素触发的事件名为:PointerPressed 。我们要做的是:在 PointerPressed 事件被触发后调用 ViewModel 中的 Command。

Avalonia XAML Behaviors is an easy-to-use means of adding common and reusable interactivity to your Avalonia applications with minimal code. Avalonia port is available only for managed applications. Use of XAML Behaviors is governed by the MIT License.

Avalonia.Xaml.Behaviors

先在项目中增加对 Avalonia.Xaml.Behaviors 的 NuGet 引用,接着在页面上引入名称空间:

<UserControl ...
  xmlns:ic="clr-namespace:Avalonia.Xaml.Interactivity;assembly=Avalonia.Xaml.Interactivity"
  xmlns:ia="clr-namespace:Avalonia.Xaml.Interactions.Core;assembly=Avalonia.Xaml.Interactions"
>
...
</UserControl>

以下代码假设 ViewModel 中有一个名为 TestCommand 的命令:

<Border Background="Transparent">
    <ic:Interaction.Behaviors>
        <ia:EventTriggerBehavior EventName="PointerPressed">
            <ia:InvokeCommandAction Command="{Binding TestCommand}"></ia:InvokeCommandAction>
        </ia:EventTriggerBehavior>
    </ic:Interaction.Behaviors>
    ...
</Border>

Border 的 Background 属性必须要有值,即便是设置为透明也是有意义的。否则可能会出现鼠标点击没有效果的情况。

提示

本文给出的解决方案是我从 WPF 项目里继承下来的。因为目前对 Avalonia 的熟悉程度还不够,所以不确定在 Avalonia 的世界中是否有更好的方案,故本文仅供参考。请根据实际情况探索和尝试其他可能的解决方案,以便更好地满足项目的需求。

完整的代码可以看这里:

https://gitee.com/coderbusy/demo/tree/master/avaloina/BorderClickCommand

赞(1) 打赏
未经允许不得转载:码农很忙 » Avalonia 应用如何为非按钮控件绑定点击命令?

评论 抢沙发

给作者买杯咖啡

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册