【问题标题】:Xamarin.Forms CollectionView trigger event on Focus/HoverXamarin.Forms CollectionView 触发焦点/悬停事件
【发布时间】:2021-11-22 13:21:00
【问题描述】:

我目前正在尝试实现一个以 Android TV 为目标的 Xamarin.Forms 应用程序。我已经简化了我的应用程序以显示我遇到的具体问题。

我有一组通过 CollectionView 显示的项目。我可以使用 D-Pad 控件滚动此 CollectionView 内的项目,这非常好,如通过此屏幕截图所示,如果我使布局边界可见,则“焦点”/“选定”项目是可见的。

除了 CollectionView 上的“ItemSelected”事件之外,没有其他可用的事件,该事件仅在实际按下 Enter 时发生。我试图将“焦点”事件添加到构成此页面的所有元素中,并且没有任何内容被触发。我不确定这里到底“关注”了什么。

这是我的页面:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:viewmodels="clr-namespace:Channels.ViewModels" 
             x:Class="Channels.MainPage"
             x:DataType="viewmodels:ChannelViewModel"
             BackgroundColor="{DynamicResource BackgroundColour}">
    <StackLayout Orientation="Vertical" Padding="10">
        <Label Text="Selected Item" TextColor="White" Margin="0, 0, 10, 10"></Label>
        <CollectionView ItemsSource="{Binding Data}">
            <CollectionView.ItemsLayout>
                <LinearItemsLayout ItemSpacing="5"></LinearItemsLayout>
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <StackLayout Padding="5" Spacing="5" BackgroundColor="Red">
                        <Label Text="Test Text" HorizontalTextAlignment="Center" HorizontalOptions="FillAndExpand" TextColor="White"></Label>
                    </StackLayout>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </StackLayout>
</ContentPage>

我想确切地知道这里的重点是什么,以及是否有可能做我所说的事情。

我没有找到很多 Xamarin 用于 Android TV 的示例,因此可能无法执行此类操作。我也尝试在 .NET Maui 中实现相同的代码,但找不到任何可能在这里工作的事件。

【问题讨论】:

    标签: xamarin.forms maui


    【解决方案1】:

    您可以使用模板中的GestureRecognizers 来触发您选择项目或单击项目时想要执行的操作。

       <Label>
                <Label.GestureRecognizers>
                    <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
                </Label.GestureRecognizers>
            </Label>
    

    【讨论】:

    • 不幸的是,在点击该项目之前不会做任何事情。在问题中,Android TV 方向键 (d-pad) 用于从一个项目移动到下一个项目(更改焦点)。 OP 正在询问如何检测项目何时获得焦点。
    • 欣赏答案,但@ToolmakerSteve 说的是正确的,遗憾的是,这在 Android TV 的情况下不会做任何事情,没有“点击”发生看起来不像任何 GestureRecognisers也适合
    • @Jono_2007 你真的使用标签的Focused事件吗?
    • @WendyZang-MSFT - 是的,我在上面的标签上添加了Focused="Label_Focused",并为事件设置了断点,并且没有命中断点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    相关资源
    最近更新 更多