首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Xamarin Forms CollectionView没有KeyboardDismissMode属性

。Xamarin.Forms是一个跨平台的移动应用程序开发框架,可以让开发人员使用C#和XAML创建iOS、Android和Windows的原生用户界面。CollectionView是Xamarin.Forms中用于显示集合数据的控件。

KeyboardDismissMode是一个用于指定当用户触摸屏幕中的非键盘区域时,键盘是否应该自动关闭的属性。然而,在Xamarin Forms的CollectionView中,并没有提供直接的KeyboardDismissMode属性。

解决这个问题的一种方法是使用Effect,Effect可以在Xamarin.Forms中自定义控件的行为和外观。可以通过创建自定义Effect来实现CollectionView在点击非键盘区域时关闭键盘的功能。

以下是实现此功能的示例代码:

首先,在共享代码项目中创建一个名为KeyboardDismissEffect的类,继承自RoutingEffect:

代码语言:txt
复制
using Xamarin.Forms;

namespace YourNamespace
{
    public class KeyboardDismissEffect : RoutingEffect
    {
        public KeyboardDismissEffect() : base("YourNamespace.KeyboardDismissEffect")
        {
        }
    }
}

然后,在iOS和Android项目中分别创建一个名为KeyboardDismissEffectRenderer的类,实现PlatformEffect类的子类:

在iOS项目中,创建KeyboardDismissEffectRenderer.cs:

代码语言:txt
复制
using UIKit;
using YourNamespace.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ResolutionGroupName("YourNamespace")]
[assembly: ExportEffect(typeof(KeyboardDismissEffectRenderer), "KeyboardDismissEffect")]
namespace YourNamespace.iOS
{
    public class KeyboardDismissEffectRenderer : PlatformEffect
    {
        protected override void OnAttached()
        {
            var view = Control ?? Container;
            var tapGestureRecognizer = new UITapGestureRecognizer(() =>
            {
                view.EndEditing(true);
            });

            view.AddGestureRecognizer(tapGestureRecognizer);
        }

        protected override void OnDetached()
        {
            var view = Control ?? Container;
            foreach (var gestureRecognizer in view.GestureRecognizers)
            {
                view.RemoveGestureRecognizer(gestureRecognizer);
            }
        }
    }
}

在Android项目中,创建KeyboardDismissEffectRenderer.cs:

代码语言:txt
复制
using Android.Views;
using YourNamespace.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ResolutionGroupName("YourNamespace")]
[assembly: ExportEffect(typeof(KeyboardDismissEffectRenderer), "KeyboardDismissEffect")]
namespace YourNamespace.Droid
{
    public class KeyboardDismissEffectRenderer : PlatformEffect
    {
        protected override void OnAttached()
        {
            var view = Control ?? Container;
            view.Click += View_Click;
        }

        protected override void OnDetached()
        {
            var view = Control ?? Container;
            view.Click -= View_Click;
        }

        private void View_Click(object sender, System.EventArgs e)
        {
            var inputMethodManager = (InputMethodManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.InputMethodService);
            inputMethodManager.HideSoftInputFromWindow(Control?.WindowToken, HideSoftInputFlags.None);
            Control?.ClearFocus();
        }
    }
}

最后,将效果应用到CollectionView上,可以使用XAML或C#代码。以下是在XAML中应用效果的示例:

代码语言:txt
复制
<CollectionView>
    <CollectionView.Effects>
        <local:KeyboardDismissEffect />
    </CollectionView.Effects>
    <!-- CollectionView的其他属性和数据绑定 -->
</CollectionView>

以上代码中,local是指向你的自定义Effect类所在命名空间的XML命名空间的引用。

这样,当用户在CollectionView上点击非键盘区域时,键盘会自动关闭。

腾讯云相关产品:在处理移动应用程序开发和云计算方面,腾讯云提供了丰富的产品和服务,例如云服务器(https://cloud.tencent.com/product/cvm)和对象存储(https://cloud.tencent.com/product/cos),可以帮助开发人员构建和部署高性能的移动应用程序和云解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Xamarin 社区团队发布了的两个新的工具包 MAUI 兼容版本

    Dependency Xamarin.Forms .NET MAUI Xamarin.Forms .NET MAUI Native Implementation Custom Renderer Custom...✅ 现有的 Xamarin.Forms 应用迁移到 .NET MAUI MauiCompat 库是作为从 Xamarin.Forms 迁移到 .NET MAUI 的一个有用步骤而创建的。...要将命名空间添加到工具包: using Xamarin.CommunityToolkit.Markup; 在您的 C# 页面中,添加在您的 XAML 页面中,添加命名空间属性: xmlns:xct="...每当您遇到 a 时,您可能想尝试将控件的所有颜色属性设置为显式值,看看是否能解决问题。如果没有,请告诉我们您所看到的内容,以便我们查看。...概括 将现有 Xamarin.Forms 应用程序迁移到 .NET MAUI 时,请利用这些库。

    2.3K10

    Xamarin Forms WPF 干掉默认的窗口导航条

    在创建默认的 Xamarin Forms WPF 应用,将和 UWP 应用的界面不相同,在 WPF 项目会显示顶部蓝色的一条,看起来不好看,那么可以如何干掉他 下图是一个默认的 Xamarin Forms...此时显示工具的蓝色条就是本文说的 窗口导航条,在 Xamarin Forms 的源代码,这个导航条是在 FormsWindow.xaml 文件里面,使用 PART_TopAppBar 控制的,也就是想要不显示这个工具栏...此时原本显示工具的蓝色的一条就被干掉了 这部分文档请看 Navigation In Xamarin.Forms xamarin.forms - Remove navigation bar in contentpage...Xamarin - Stack Overflow Navigating in Xamarin Forms - Xamarin Help 那为什么设置 HasNavigationBar 就能干掉工具栏,...="False" 就能让 VisualPageRenderer 也就是对应的布局更新工具栏不可见 在 Xamarin Forms 的 WPF 版本里面,在 WPF 实现了大量基础的控件,和 Xamarin

    1.3K10

    C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码

    只讲一个,关于Xamarin.Forms针对各个平台如何进行可定制化的控件操作. 也就是针对某个平台的细颗粒化操作. 废话不多说,我们直接开始....2.为什么需要自定义渲染器 因为在不使用自定义渲染器的情况下更改Xamarin.Forms控件的外观是颗粒度较粗的....我们找到一个Xamarin控件,比如ProgressBar进度条..它在Xamarin中,可控的属性应该就只有Progress进度而已.....我们可以看到,在安卓库中,它就继承了安卓widget的原生进度条,那么,原生进度条的所有属性,我们就都是可以用的了. 比如我们在代码中写的 "ScaleY" 这种属性和SetPadding这种方法....,所以前面我一直强调的,有些东西 你找了安卓(IOS)的解决方案,就同样找到了Xamarin的 我这里虽然没有IOS的环境,但是我们也可以到IOS里面看看ProgressBarRenderer继承了什么

    2.4K100

    移动APP的自动化测试

    众所周知,移动设备多种多样,数量及其庞大,设备的类型也是各式各样,要如何才能保证App用户界面在成千上百iOS和Android设备中都能正常显示,没有错误?这是很多APP开发人员最头疼的事情了。...访问控件 当使用Xamarin.Forms创建应用程序时,会使用Xamarin.Forms的控件和XAML创建用户界面。...运行时,Xamarin.Forms会根据我们创建的用户界面生成对应的原生应用程序。...由于我们正在开发针对Xamarin.Forms控件,因此可通过StyleID 特殊属性Xamarin.UITests中的访问权限。...e.NativeView.AccessibilityIdentifier = e.View.StyleId; 6: } 7: }; Android 设置 打开MainActivity.cs文件,在OnCreate方法中添加以下代码: 1: Xamarin.Forms.Forms.ViewInitialized

    2K80

    张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用

    Forms 里的大多数控件都继承自 View 类,而 View 类中有一个公共属性 GestureRecognizers,因此控件都可以添加各种手势识别。...当然手势不止 Tap 这一种,更多的可以在 Xamarin 的指南中了解:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals...gestures/ public IList GestureRecognizers { get; } 二、用法   在说用法之前,首先要搞清楚我们需要关注 Tap 的哪些属性...YourControl.GestureRecognizers.Add(tapGestureRecognizer); 三、应用   写了一个小小的 Demo (GitHub:https://github.com/ZhangGaoxing/xamarin-forms-demo...超链接   Forms 里是没有超链接的,有时候就很头疼。我顺便看了一下 Xaml Standard 的第一版草稿,里面还是没有超链接。可以用 TapGestureRecognizer 去仿制一个。

    80270

    张高兴的 Xamarin.Forms 开发笔记:TapGestureRecognizer 的简单介绍与应用

    Forms 里的大多数控件都继承自 View 类,而 View 类中有一个公共属性 GestureRecognizers,因此控件都可以添加各种手势识别。...当然手势不止 Tap 这一种,更多的可以在 Xamarin 的指南中了解:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals...gestures/ public IList GestureRecognizers { get; } 二、用法   在说用法之前,首先要搞清楚我们需要关注 Tap 的哪些属性...YourControl.GestureRecognizers.Add(tapGestureRecognizer); 三、应用   写了一个小小的 Demo (GitHub:https://github.com/ZhangGaoxing/xamarin-forms-demo...超链接   Forms 里是没有超链接的,有时候就很头疼。我顺便看了一下 Xaml Standard 的第一版草稿,里面还是没有超链接。可以用 TapGestureRecognizer 去仿制一个。

    1K20

    Visual Studio 2017 针对移动开发的新特性介绍

    Visual Studio是世界上最好的IDE之一,如果是 .NET世界,那就没有之一了(^_^),而最近推出的Visual Studio 2017在移动平台方面更是加强了这一点。...提升了XAML智能感知 Visual Studio 2017的任何Xamarin.Forms XAML文档都能让你感受到智能感知的显著提升。...全新的代码完成引擎支持绑定、自定义属性、自定义控件和转换器等。 Forms Previewer使得预览效果更加直观 Xamarin....Visual Studio 2017对Xamarin.Forms Previewer做了许多改进,来增加所支持的控件和XAML结构的范围。...总结 不论是.NET开发者,还是移动应用开发者,如果你还没有深入了解Visual Studio 2017,那么可以尝试使用一下这个版本的新特性和增强。

    2.8K20

    WPF 从零手动创建承载 Xamarin Forms 项目

    现在完全开源的 Xamarin Forms 是支持使用 WPF 进行承载,也就是使用 Xamarin 开发的控件等是可以在 WPF 项目使用的。...本文来告诉大家如何在 WPF 中运行 Xamarin Forms 项目,让 Xamarin Forms 构建为 WPF 应用 默认的 VS 没有加上 WPF 的模版,而官方文档 WPF Platform...Setup - Xamarin 旧了一点,因为社区的开发比较激进,而文档没有更新 如果你按照官方文档玩,预计会在构建的时候看到如下提示 App.xaml : error : : XamlC error...我推荐是新创建一个,这样你通过之后,才进行修改,能解决因为自己原有的 Xamarin Forms 项目的坑让代码构建失败 新建一个叫 Xx.WPF.csproj 的项目,请将 Xx 替换为你自己的名字。...使用 WPF 项目没有安卓项目那么弱,对命名长度要求比较多,在安卓项目里面如果你敢将名字命名比较长,那么将会因为路径太长炸掉,详细请看 Xamarin 构建安卓失败 因为路径太长 在 Xx.WPF.csproj

    1.7K20

    Xamarin 技术全解析

    另外Xamarin还提供了Xamarin.Forms UI工具包,Xamarin.Forms可以帮助开发人员快速的构建跨平台的UI,通过一次编码,生成多个平台的原生UI界面,稍后本文会讲述Xamarin.Forms...打开Main.storyboard 文件,可以从Toolbox上拖拽一些原生控件到View Controller上,与Xcode中使用方式一致,但是有一些功能没有Xcode 强大,比如设置View的Auto...2.3 使用Xamarin.Forms来构建跨平台的应用 Xamarin.Forms 是一个创建跨平台用户界面的库,通过Xamarin.Forms 可以一次编码生成基于各个移动平台(iOS, Android...使用Xamarin.Forms构建跨平台应用的一个缺陷就是只能使用Xamarin.Forms包中的控件,会有一些限制。...如果先了解更多关于如何使用Xamarin.Forms构建跨平台应用,请参见文章:Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面。 3.

    5.9K70

    dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用

    等系统创建好了 Xamarin Forms 的方法,咱就在 UOS 上一步步创建 删除 A 项目,也就是安装了 Xamarin Forms 的控制台项目,的 Program.cs 文件 然后选择新建一个空...在使用 Xamarin.Forms 的 GTK 应用,有两层入口,第一层是本机程序的入口,也就是 B 项目的 Program 文件的 Main 方法入口,第二层就是 Xamarin.Forms 的 App...但是此时将会发现构建不通过,因为 B 项目,也就是 GTK 项目没有引用足够的 NuGet 包。...给 B 项目添加以下 NuGet 库 OpenTK Xamarin.Forms Xamarin.Forms.Platform.GTK 接着打开 B 项目的 Program.cs 文件,在 Main 方法添加如下代码...本文没有给大家一个简单的方法,主要是让大家可以了解更多内容 官方文档请看 GTK# Platform Setup - Xamarin 尽管官方文档里面说的是预览版,但是经过了2年的开发,现在不能的支持的点很少

    2.6K10

    【愚公系列】2022年09月 MAUI框架-MAUI项目的创建

    文章目录 前言 一、MAUI项目的创建 二、MAUI项目的应用场景 1.智能家居系统 2.WPF的上位机应用 3.WPF的业务系统 4.Xamarin的移动应用 前言 在2020年5月, 微软宣布了MAUI...跨平台框架, MAUI 是Xamarin.Forms演变而来, 这也就意味着, 如果你原来具备Xamarin.Forms开发经验, 你可以流畅的过渡到MAUI开发当中。...此版本中, 将不会存在Xamarin.Forms项目模板。...1、关于MAUI框架 - 多平台应用UI框架 - 2020.5 MAUI 2022.5 RC3 Xamarin演进 Linux社区 2、从WPF到MAUI - 技术点 XAML 资源 、布局、样式...、模板、图形 、依赖属性、数据绑定 MVVM 控件 - 框架特色 最完善 WPF MAUI 3、基于MAUI的功能实现 - 交互布局 VerticalStackLayout HorizaontalStackLayout

    3.3K20

    浅谈Xamarin Community Toolkit的未来发展

    引入 Xamarin.CommunityToolkit.MauiCompat 为了帮助我们所有人在将 Xamarin.Forms 应用程序移植到 .NET MAUI 时避免破坏性更改,我们发布了 Xamarin...注意:为了确保没有破坏性的更改,Xamarin.CommunityToolkit.MauiComp-at将继续使用自定义渲染器,而不会使用.NET MAUI处理程序。...淘汰Xamarin.CommunityToolkit 按照与 Xamarin.Forms 相同的时间表,我们将在 2022 年 11 月之前继续为 Xamarin Community Toolkit提供服务...如果没有您的帮助,我们不可能创建这样一个成功的库,我们已经迫不及待地想看到您将为.NET MAUICommunity Toolkit添加的惊人的新功能了!...WT.mc_id=mobile-34797-bramin Xamarin.Forms相同的时间表: https://github.com/xamarin/Xamarin.Forms/wiki/Feature-Roadmap

    1.4K10
    领券