如何在 MAUI 中拥有一个命令(能够)视图或一个带有内容的按钮?

Posted

技术标签:

【中文标题】如何在 MAUI 中拥有一个命令(能够)视图或一个带有内容的按钮?【英文标题】:How to have a Command(able) view or a Button with content in MAUI? 【发布时间】:2022-01-22 05:33:12 【问题描述】:

我需要一个可以绑定命令的复合可点击 MAUI 组件。

Buttons 不能包含内容,只能包含文本。 ContentViews 没有命令,所以我尝试了这种方式

//

public partial class BtnView : BaseContentView<BtnVm>

    public ICommand Command  get; set; 

    public object CommandParameter  get; set; 

    public BtnView() : base()
    
        InitializeComponent();
    

    public static BindableProperty CommandProperty  get; set;  = BindableProperty.Create(nameof(Command), typeof(Command), typeof(BtnView));
    public static BindableProperty CommandParameterProperty  get; set;  = BindableProperty.Create(nameof(CommandParameter), typeof(object), typeof(BtnView));

这样,我希望 Command 属性是可绑定的,但是:

绑定命令时出现 XFC0009 错误

找不到“命令”的属性、BindableProperty 或事件,或者值和属性之间的类型不匹配。

没有通过点击触发它的机制。

我打算如何实现这种组件?

【问题讨论】:

【参考方案1】:

像 Xamarin Forms 一样,Maui 可以attach a TapGestureRecognizer 到任何视觉元素。另见TapGestureRecognizer doc。

将此添加到 xaml 中的 ContentView

<ContentView.GestureRecognizers>
    <TapGestureRecognizer
        NumberOfTapsRequired="1"
        Tapped="OnTapped">
    </TapGestureRecognizer>
</ContentView.GestureRecognizers>

将此添加到 xaml.cs 中的“代码隐藏”中:

protected void OnTapped(object sender, EventArgs args)

    // Do something here.

【讨论】:

我需要从父组件引用一个命令,所以我将使用&lt;TapGestureRecognizer Command="Binding SelectChild" CommandParameter="Binding Child"/&gt;

以上是关于如何在 MAUI 中拥有一个命令(能够)视图或一个带有内容的按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .NET MAUI Preview 7 创建 DataGrid?

[MAUI]在.NET MAUI中复刻苹果Cover Flow

MAUI自定义 .NET MAUI XAML 页面中的布局

MAUI自定义 .NET MAUI XAML 页面中的布局

.NET MAUI 正式发布 -- 一个代码库,多个平台

[MAUI程序设计]界面多态与实现