c# - 图像 TapGestureRecognizer 未在 Xamarin 中触发

标签 c# .net xamarin xamarin.forms

在我的 Xamarin 应用程序中,我正在使用工具提示效果(按照这个 article )。
Help Icons在页面上,当我点击它时,工具提示出现,如果我点击 Stacklayout 区域的任何地方,它就会消失,这意味着它工作正常。
有多个Help Icons ,并且我希望如果我单击任何帮助图标,此帮助图标的工具提示只会出现并消失打开的工具提示,因为现在可以同时打开多个工具提示。
为此,我添加了一个 TapGestureRecognizer ,当有人点击帮助图标时,关闭打开的工具提示。但是,我不知道为什么TapGestureRecognizer甚至不会触发。
.xaml

<StackLayout x:Name="mainstacklayout">

<StackLayout.GestureRecognizers>
    <TapGestureRecognizer Tapped="Handle_Tapped"
                          NumberOfTapsRequired="1" />
</StackLayout.GestureRecognizers>

// Code

<Image Source="drawable/help.png"
                    WidthRequest="20"
                    HeightRequest="20"
                    effects:TooltipEffect.Position="Left"
                    effects:TooltipEffect.BackgroundColor="#222222"
                    effects:TooltipEffect.TextColor="#FFFFFF"
                    effects:TooltipEffect.Text="Tooltip"
                    effects:TooltipEffect.HasTooltip="True">

        <Image.GestureRecognizers>
            <TapGestureRecognizer Tapped="Handle_Tapped"
                                  NumberOfTapsRequired="1" />
        </Image.GestureRecognizers>
</Image>

// Code

</StackLayout>
.xaml.cs
public void Handle_Tapped(object sender, EventArgs args)
{
    foreach (var c in mainstacklayout.Children)
    {
        if (TooltipEffect.GetHasTooltip(c))
        {
            TooltipEffect.SetHasTooltip(c, false);
            TooltipEffect.SetHasTooltip(c, true);
        }
    }
}

最佳答案

  • 第一个测试是更改XAML声明每个图像的位置,

  • effects:TooltipEffect.HasTooltip="False" :
    <Image Source="drawable/help.png"
                    ...
                    effects:TooltipEffect.HasTooltip="False">
    
    如果这样做,识别器是否工作?如果是这样,那么您就成功了一半。
    在每个图像的声明中都这样做。这应该“禁用”所有工具提示。
    2.
    使用 TapGestureRecognizer 打开一个(并关闭其他):
    public void Handle_Tapped(object sender, EventArgs args)
    {
        foreach (var c in mainstacklayout.Children)
        {
            // Turn off any that are on.
            if (TooltipEffect.GetHasTooltip(c))
            {
                TooltipEffect.SetHasTooltip(c, false);
            }
        }
        // Turn on the desired tooltip.
        if (sender is View activeView)
        {
            TooltipEffect.SetHasTooltip(activeView, true);
    
            // TODO: TooltipEffect source needs this method added;
            // it has to find the effect for activeView, and call its `OnTap` method.
            //TODO TooltipEffect.OnTap(activeView);
        }
    }
    

    关于c# - 图像 TapGestureRecognizer 未在 Xamarin 中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68298040/

    相关文章:

    c# - 使用带反射的 T4 .tt 模板

    c# 文本编辑器建模列表

    .net - Visual Studio 2013 : "No framework version is selected, you must select one before creating a project."

    .net - 是/否适用于其他文化的 WPF 确认消息框

    c# - Xamarin 中的 Objective-c 绑定(bind)问题

    c# - 如何确保两个 .NET 库在功能上相同

    c# - 通过 ListView 进行 foreach 并访问子项?

    Xamarin Android : Native TLS, ClientWebSocket,自定义证书颁发机构证书验证失败

    c# - 有没有办法显示向上滑动面板,当用户向上滑动时显示更多数据?

    c# - ChromeDriver 窗口不会重新调整大小以适应 Nexus 5 的尺寸