如何向 .NET Maui 应用程序中的所有按钮添加全局单击事件处理程序?

问题描述 投票:0回答:1

我有一个 .NET Maui 应用程序,应该将用户事件写入日志文件。我一直在做的是将这段代码放在每个基页或不继承该基页的页面中。

我了解到可以在依赖项注入级别使用按钮处理程序来完成此操作。我怎样才能实现这一目标?

public class BasePage : ContentPage
{
    public BasePage()
    {
        this.Appearing += OnAppearing;
    }

    private void OnAppearing(object sender, EventArgs e)
    {
        AttachBehaviors(this);
    }

    private void AttachBehaviors(Element element)
    {
         var tree = this.GetVisualTreeDescendants();

 foreach (Button cbx in tree.Where(el => el.GetType() == typeof(Button)).Cast<Button>())
 {
     cbx.Clicked += GlobalButtonClicked;
 }
    }
}
xaml xamarin.forms maui
1个回答
0
投票

最简单的方法是使用样式和命令,

在您的应用程序级别资源中,您可以执行此操作

<Style TargetType="Button>
  <Setter Property="Command" Value"{Binding ButtonClickedCommand}"/>
</Style>

在你的 BaseViewModel 中你需要添加这个命令:

public class BaseViewModel
{
    public ICommand ButtonClickedCommand { get; set; }
    public BaseViewModel()
    {
        ButtonClickedCommand = new Command(()=> WhateverActionYouWant());
    }

    private void WhateverActionYouWant()
    {
       //Your logging mechanism or whatever comes here.
    }
}

请注意,在某些情况下,如果您的按钮位于列表视图或其他内容中,您可能需要手动重新分配此绑定。

© www.soinside.com 2019 - 2024. All rights reserved.