在 Xamarin Forms / .NET MAUI 中使用带有按钮的 TouchEffect

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

我有包含多个项目的 CollectionView。

这些项目具有相同的数据模板,其中包含带有按钮的堆栈布局。

    <CollectionView ItemSizingStrategy="MeasureFirstItem"
                    ItemsSource="{Binding SaveItems}"
                    SelectionMode="None">
        <CollectionView.ItemTemplate>
            <DataTemplate x:DataType="listItems:MyItemVM">
                <StackLayout TouchEffect.Command="{Binding SelectedItemCommand}"
                             TouchEffect.CommandParameter="{Binding .}">
                    <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} />
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>

当我按下按钮时,将调用 Stacklayout,因为它的视图层次结构较高。我该如何做到这一点,以便我按下按钮外部它会调用 StackLayout 命令,并且如果我按下按钮则会调用按钮命令?

我尝试了InputTransparent、CascadeInputTransparent、TouchEffect.ShouldMakeChildrenInputTransparent的多种设置。我原以为 InputTransparent = true 会导致两个命令都有效,但没有。当 InputTransparent = true 时,一个有效,另一个无效,反之亦然。

我曾考虑过使用 Skia 渲染器来检测触摸位置,或者在本机代码中拦截触摸事件,但我希望 XAML 有更简单的方法。

编辑:我设法使用以下数据模板检测这两个命令:

<StackLayout>
  <Grid>
    <Grid TouchEffect.Command="{Binding SelectedItemCommand}"
                             TouchEffect.CommandParameter="{Binding .}" /> 
    <Grid>
         <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} />
    </Gri>
  </Grid>
</StackLayout>

因为网格内容可以叠加。它的性能不是很好,但它可以工作。

.net xaml xamarin.forms maui
1个回答
0
投票

已解决:我设法使用以下数据模板检测这两个命令:

<StackLayout>
  <Grid>
    <Grid TouchEffect.Command="{Binding SelectedItemCommand}"
                             TouchEffect.CommandParameter="{Binding .}" /> 
    <Grid>
         <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} />
    </Gri>
  </Grid>
</StackLayout>

因为网格内容可以叠加。它的性能不是很好,但它可以工作。

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