Xaml 如果用户单击屏幕上的其他位置,如何隐藏stacklayout

Xaml 如果用户单击屏幕上的其他位置,如何隐藏stacklayout,xaml,xamarin.forms,Xaml,Xamarin.forms,我在App.xaml文件中为应用程序头创建了ResourceDictionary。 在header中,我创建了两个带有stacklayouts和grids的下拉菜单。 第一个是一些用户信息,第二个是搜索。 默认情况下,这些下拉菜单是隐藏的。 如果用户单击“用户”图标或“搜索”图标,则“最大一个”可能可见。 因此,在HeadServiceWModel中,我使用以下两种方法: private async void AccountInformationAsync() {

我在App.xaml文件中为应用程序头创建了ResourceDictionary。 在header中,我创建了两个带有stacklayouts和grids的下拉菜单。 第一个是一些用户信息,第二个是搜索。 默认情况下,这些下拉菜单是隐藏的。 如果用户单击“用户”图标或“搜索”图标,则“最大一个”可能可见。 因此,在HeadServiceWModel中,我使用以下两种方法:

private async void AccountInformationAsync()
        {
            var userService = await UserService.GetUserData();
            Username = userService.Username;
            DisplayName = userService.DisplayName;
            Status = userService.Status;
            Influence = userService.Influence;
            MTP = userService.MTP;

            VisibilityInformation = !VisibilityInformation;
            if (VisibilityInformation == true)
            {
                VisibilitySearch = false;
            }
        }

        private void Search()
        {
            VisibilitySearch = !VisibilitySearch;
            if (VisibilitySearch == true)
            {
                VisibilityInformation = false;
            }
        }
这个很好用。。。如果用户单击用户图标,则会显示用户信息,如果用户单击serach图标信息,则会隐藏搜索菜单


因此,我的问题是,如果用户单击屏幕上的其他位置,如何隐藏这些菜单?

您需要在页面的主布局视图中添加TapGestureRecognitor。点击它,你可以使用命令隐藏下拉菜单

    private void HideDropDowns()
    {
        VisibilitySearch = false;
        VisibilityInformation = false;
    }

HideDropDowns应该是分配给TapGestureRecognitor中的命令的方法。

我开始实现类似的方法,但后来我意识到我必须在应用程序的每个页面和每个布局上都这样做,即使是在某些特定元素上,我也应该添加TapBirth来隐藏这两个元素。有什么简单的解决方案吗?您可以创建一个CustomContentPage并向父元素添加TapGestureRecognitor,然后使所有其他页面实现此CustomContentPage。