【问题标题】:Not able to close the popup on click event in Xamarin Forms无法关闭 Xamarin Forms 中单击事件的弹出窗口
【发布时间】:2021-09-28 08:30:09
【问题描述】:

我使用了 Rg.Plugins.Popup。 我已经对齐关闭按钮,该按钮从右侧和顶部对齐在窗口外 50% 的右上角,如下图所示。

现在它按照预期的设计显示,但问题是当我点击它时,只有关闭按钮的内部部分被点击,而外部部分不可点击。所以直到我们点击关闭按钮的内部部分时才能关闭弹出窗口。

我正在分享我的代码以获得更多想法。

<ScrollView Orientation="Horizontal">
    <AbsoluteLayout HorizontalOptions="Center"
                    VerticalOptions="Center"
                    Padding="0,0,0,0"
                    Margin="0,0,0,0"
                    Opacity="1">
        <Frame AbsoluteLayout.LayoutBounds="0,0,1,1"
               IsClippedToBounds="True"
               AbsoluteLayout.LayoutFlags="All"
               HasShadow="False"
               x:Name="outframe"
               Margin="0"
               CornerRadius="15"
               Padding="0"
               OutlineColor="#ffffff"
               HorizontalOptions="FillAndExpand"
               VerticalOptions="FillAndExpand">
            <StackLayout Orientation="Horizontal"
                         x:Name="stkVideo"
                         Padding="0">
                <Image x:Name="ximage"
                       Aspect="AspectFill"
                       HorizontalOptions="FillAndExpand"
                       VerticalOptions="FillAndExpand"
                       BackgroundColor="#4A4541" />
                <video:VideoPlayer x:Name="trainingPlayer"
                                   DisplayControls="True"
                                   FillMode="ResizeAspectFill"
                                   FlowDirection="LeftToRight"
                                   Volume="100"
                                   Grid.Row="0"
                                   IsVisible="false">
                </video:VideoPlayer>
            </StackLayout>
        </Frame>
        <ContentView AbsoluteLayout.LayoutBounds="0.50, 0.50, -1, -1"
                     AbsoluteLayout.LayoutFlags="PositionProportional">
            <Image Source="Play.png"
                   HeightRequest="{OnIdiom Phone=70,Tablet=85}"
                   WidthRequest="{OnIdiom Phone=70,Tablet=85}"
                   Aspect="AspectFit"
                   VerticalOptions="Center"
                   HorizontalOptions="Center"
                   x:Name="icnplay" />
            <ContentView.GestureRecognizers>
                <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped_1" />
            </ContentView.GestureRecognizers>
        </ContentView>
        <ContentView AbsoluteLayout.LayoutBounds="1.04, -0.09, -1, -1"
                     AbsoluteLayout.LayoutFlags="PositionProportional" >
            <Image Source="close.png" 
                   HeightRequest="{OnIdiom Phone=35,Tablet=45}"
                   WidthRequest="{OnIdiom Phone=35,Tablet=45}"
                   Aspect="AspectFit">
                    <Image.GestureRecognizers>
                    <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
        </Image.GestureRecognizers>
                </Image>
            <ContentView.GestureRecognizers>
                <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped" />
            </ContentView.GestureRecognizers>
        </ContentView>
    </AbsoluteLayout>
</ScrollView>

当用户点击窗口外的关闭按钮部分时,我需要做哪些代码更改才能关闭弹出窗口?

【问题讨论】:

  • 您一定需要&lt;ContentView&gt; 包装&lt;Image&gt; 标签吗?如果 TapGestureRecognizer 填充相同的空间并调用相同的方法/命令,通常只在一个视图上添加就足够了。
  • 是的。我也只能添加图像标签,但我面临的问题仍然存在。
  • 可能是按钮的外部部分在 AbsoluteLayout 之外,但很难从您的 XAML sn-p 中分辨出来。
  • 好的。谢谢@AndrewH
  • 不是一个干净的解决方案,但您可以使 AbsoluteLayout 更大以适合 AbsoluteLayout 内按钮的外部部分,然后为您的视频播放器框添加边距以保持其相对于之前的大小。

标签: xaml xamarin xamarin.forms popup


【解决方案1】:

问题是关闭按钮位于&lt;AbsoluteLayout&gt; 的范围之外。一种解决方案涉及几个步骤:

  1. 使 AbsoluteLayout 大一些
  2. 为视频播放器帧添加一个边距,该边距等于 AbsoluteLayout 的大小
  3. 更新关闭按钮的位置,使其保持在视频播放器框架的右上角

现在关闭按钮包含在 AbsoluteLayout 中,整个关闭按钮区域将接收并引发点击/点击事件。

【讨论】:

    【解决方案2】:

    我猜你想实现这个:

    在黄框外点击会关闭一切。

    红色部分有一个 GestureRecognizer

    您可以通过使用 Grid 或 Absolute 布局来实现这一点,这些视图允许您“堆叠”或向 UI 添加层。

    代码示例:

    <AbsoluteLayout
            BackgroundColor="Green"
            HorizontalOptions="FillAndExpand"
            VerticalOptions="FillAndExpand">
            <StackLayout AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All">
                <Button Clicked="Button_Clicked" Text="Coso" />
                <Button Clicked="Button_Clicked_1" Text="Show popup" />
            </StackLayout>
            <Frame
                x:Name="closeFrame"
                AbsoluteLayout.LayoutBounds="1,1,1,1"
                AbsoluteLayout.LayoutFlags="All"
                BackgroundColor="Red"
                IsVisible="false">
                <Frame.GestureRecognizers>
                    <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="TapGestureRecognizer_Tapped" />
                </Frame.GestureRecognizers>
            </Grid>
            <Frame
                x:Name="popupGrid"
                AbsoluteLayout.LayoutBounds="0.5,0.5,0.5,0.5"
                AbsoluteLayout.LayoutFlags="All"
                BackgroundColor="Yellow"
                IsVisible="false">
                <Label Text="Close ouside this" TextColor="Black" />
            </Frame>
        </AbsoluteLayout>
    

    在您后面的代码中打开/关闭元素的可见性

    【讨论】:

    • 感谢您的回复。如果它在框架之外,那么它是可点击的,但如果它的某些部分向内和向外,则关闭按钮的向外部分是不可点击的。这是我面临的实际问题。
    • 您可以编辑您的帖子并放置您想要可点击但不是可点击的部分的图像吗?
    • 我已更新该图像。我已经用黑色勾勒了那部分。关闭按钮的 25% 部分在该框架内,75% 部分在该框架外。所以外部部分不可点击。
    • 哪个元素处理关闭? xImage ?
    • Image Source="close.png" on Tapped event "TapGestureRecognizer_Tapped"
    猜你喜欢
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多