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

在Xamarin中,如何检查当前是否有DisplayAlert或DisplayActionSheet处于打开状态?

在Xamarin中,DisplayAlertDisplayActionSheet是用于显示警告对话框和操作表的方法。然而,Xamarin并没有提供直接的方法来检查当前是否有DisplayAlertDisplayActionSheet处于打开状态。这是因为这些对话框是由平台特定的代码处理的,而Xamarin的跨平台抽象层并不包含检查这些对话框状态的机制。

原因分析

  1. 平台特定实现DisplayAlertDisplayActionSheet在iOS和Android上的实现是由各自的平台特定代码处理的。
  2. 跨平台抽象:Xamarin.Forms试图提供一个统一的API,但某些平台特定的功能(如检查对话框状态)无法通过这个抽象层直接访问。

解决方案

虽然不能直接检查对话框是否打开,但可以通过一些间接的方法来实现类似的功能。以下是一些可能的解决方案:

1. 使用回调机制

可以在显示对话框时设置一个标志位,并在对话框关闭时重置该标志位。

代码语言:txt
复制
public class DialogHelper
{
    private static bool _isDialogOpen = false;

    public static void ShowAlert(string title, string message, Action callback)
    {
        _isDialogOpen = true;
        Device.BeginInvokeOnMainThread(() =>
        {
            Application.Current.MainPage.DisplayAlert(title, message, "OK", callback);
        });
    }

    public static void ShowActionSheet(string title, string cancel, params (string text, Action action)[] buttons)
    {
        _isDialogOpen = true;
        Device.BeginInvokeOnMainThread(() =>
        {
            Application.Current.MainPage.DisplayActionSheet(title, cancel, null, buttons.Select(b => b.text).ToArray(), (index) =>
            {
                buttons[index].action?.Invoke();
                _isDialogOpen = false;
            });
        });
    }

    public static bool IsDialogOpen()
    {
        return _isDialog::>```csharp
    public static bool IsDialogOpen()
    {
        return _isDialogOpen;
    }
}

2. 使用事件

可以通过事件来通知对话框的打开和关闭状态。

代码语言:txt
复制
public class DialogHelper
{
    public static event EventHandler DialogOpened;
    public static event EventHandler DialogClosed;

    public static void ShowAlert(string title, string message)
    {
        DialogOpened?.Invoke(null, EventArgs.Empty);
        Device.BeginInvokeOnMainThread(() =>
        {
            Application.Current.MainPage.DisplayAlert(title, message, "OK", () =>
            {
                DialogClosed?.Invoke(null, EventArgs.Empty);
            });
        });
    }

    public static void ShowActionSheet(string title, string cancel, params (string text, Action action)[] buttons)
    {
        DialogOpened?.Invoke(null, EventArgs.Empty);
        Device.BeginInvokeOnMainThread(() =>
        {
            Application.Current.MainPage.DisplayActionSheet(title, cancel, null, buttons.Select(b => b.text).ToArray(), (index) =>
            {
                buttons[index].action?.Invoke();
                DialogClosed?.Invoke(null, EventArgs.Empty);
            });
        });
    }
}

然后在需要检查对话框状态的地方订阅这些事件:

代码语言:txt
复制
public class MainPageViewModel
{
    public MainPageViewModel()
    {
        DialogHelper.DialogOpened += DialogHelper_DialogOpened;
        DialogHelper.DialogClosed += DialogHelper_DialogClosed;
    }

    private bool _isDialogOpen = false;

    private void DialogHelper_DialogOpened(object sender, EventArgs e)
    {
        _isDialogOpen = true;
    }

    private void DialogHelper_DialogClosed(object sender, EventArgs e)
    {
        _isDialogOpen = false;
    }

    public bool IsDialogOpen()
    {
        return _isDialogOpen;
    }
}

应用场景

这种检查对话框状态的需求通常出现在需要确保用户在关闭对话框之前不会执行某些操作的情况下。例如,在用户点击某个按钮时,如果对话框已经打开,则阻止进一步的操作。

参考链接

通过上述方法,可以在Xamarin中实现检查DisplayAlertDisplayActionSheet是否处于打开状态的功能。

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

相关·内容

C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

如图: 正文 1.xamarin的弹出窗 xamarin帮我们把各个系统的弹出窗做了2个统一的类.  1.DisplayAlert  2.DisplayActionSheet 我们就来一一看看 DisplayAlert..., "确定","取消"); await DisplayAlert("提示", "选中了"+date, "确定"); } DisplayActionSheet其实是一个多选的弹出层...; } 2.Xamarin的消息通讯中心( MessagingCenter) MessagingCenter允许视图模型和其他组件进行通信,而不需要知道任何关于彼此的信息.        ...MessagingCenter可以用于:用户交互(如按钮点击),系统事件(如控制更改状态其他事件(如异步下载完成)。        ...订阅者可能需要接收以改变用户界面的外观,保存数据触发其他操作。        MessagingCenter以下API,我们就来一一讲解.

1.3K50

官宣 .NET MAUI 预览版 6

如果您只想定位到移动设备桌面设备,您可以单独选择它们。 不久的将来,Visual Studio 2022 将在其安装程序包含这些。要立即使用它们,请跳转到您最喜欢的 CLI。...我们将继续每个版本更新 maui-check,因为它会对您的开发环境进行额外验证以帮助您取得成功:检查 OpenJDK、模拟器、Xcode、Visual Studio 版本等。...我们的状态报告: https://github.com/dotnet/maui/wiki/Status 手势识别器: https://docs.microsoft.com/zh-cn/xamarin/...从命令行创建新应用,然后 Visual Studio 2022 打开解决方案。...要查看未来版本的内容,请访问我们的产品路线图。 任何技术问题,请在Microsoft Q&A论坛上提问。

2.4K10
  • .NET MAUI:跨平台应用开发的全方位指南

    更强的可扩展性:提供了更灵活的扩展机制,可以轻松集成第三方库平台特定功能。...MVU 适用于具有复杂状态管理需求的应用。2. MVVM 模式MVVM 模式是大多数开发者较为熟悉的模式,尤其是 WPF 和 Xamarin.Forms 开发。...打开 Visual Studio 并选择创建一个新的 MAUI 项目:“创建新项目”对话框,选择“MAUI App”模板。选择项目名称和存放位置。...运行应用通过 Visual Studio,您可以 Android 模拟器、iOS 模拟器 Windows 平台上运行该应用。由于 MAUI 支持多平台,您编写的代码可以在所有支持的平台上无缝运行。...数据缓存:需要频繁读取的数据场景,使用内存缓存提高响应速度。

    1.1K10

    Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面

    本文将会介绍整个Xamarin.Forms框架的核心和基础概念,包括: · 如何安装 Xamarin.Forms · Visual Studio和Xamarin Studio建立 Xamarin.Forms...Forms开始编程 开发人员可以Xamarin Studio和Visual Studio创建 Xamarin.Forms的项目,四种项目类型可以选择: Portable Library:用于代码共享的类库...Xamarin.Forms每一个屏幕画面都有对应概念叫:Page,Xamarin.Forms.Page 安卓与 Activity对应, iOS 与 ViewController对应,Windows...选择条目 通过ItemSelected事件我们可以知道当前选中的条目: listView.ItemSelected += async (sender, e) => { await DisplayAlert...页面导航可以理解为一个后进先出的堆栈结构,展现一个页面相当于堆栈添加一个元素,如果需要回到前一个页面,就需要把当前的页面从堆栈删除。

    12.9K70

    笔记 | Xamarin

    类型为 bool 的 IsVisible 指示是否应从可视化树移除项,从而不在浮出控件显示。 它的默认值为 true。...android8.0以上权限变更,若apk内下载安装包后安装,首先需要确认是否安装未知来源应用程序的权限。...所以,若使用文本方式打开二进制文件时,就很容易出现文件读不完整,內容不对的错误。即使是用文本方式打开文本文件,也要谨慎使用,比如复制文件,就不应该使用文本方式。...“将程序集捆绑到本机代码”默认情况下处于禁用状态。 请注意,“捆绑到本机代码”选项执行不意味着程序集会编译到本机代码。 无法使用 AOT 编译将程序集编译为本机代码。...用xamarin开发App的体验如何

    24K20

    C# Xamarin移动开发基础进修篇

    Objective-C,SwiftJava你可以做的任何事情,你都可以C#完成。 1)、本次分享课程适合人群如下: 1、 热爱Xamarin跨平台移动开发。... Visual Studio 中使用 C# F# 生成完全本机的 Android 应用。 Xamarin.iOS 为 .NET 开发人员提供了完整的 iOS SDK。... Visual Studio 中使用 C# F# 生成完全本机的 iOS 应用。 Xamarin.Mac 为 .NET 开发人员提供了完整的 macOS SDK。...提供的移动模拟器启动速度很慢,毕竟和真机环境还是一些出入的,所以我们应用程序还是部署我们实际的手机设备中去,真实的还原第一“现场”体验。 3.4、为什么需要安装虚拟镜像手机软件?...,获取网络信息状态,如当前的网络连接是否有效 获取WiFi状态android.permission.ACCESS_WIFI_STATE,获取当前WiFi接入的状态以及WLAN热点的信息 写入外部存储

    6K20

    使用 Xamarin iOS 真机上部署应用进行调试

    所以本文需要介绍如何使用 Xamarin iOS 真机上部署应用进行调试,然后顺便说一些注意事项。... XCode 准备 XCode 中新建一个空白 iOS 项目(什么类型都可以),这个项目随时可以丢弃。 选择你新建的项目,会出现这个项目的信息可以填,默认 General 标签。...手机,删除刚刚部署的应用 如果你刚刚部署了多个空白应用,那么都要删除 回到 Visual Studio for Mac 并打开你的 Xamarin 项目,然后打开准备部署的应用的 Info.plist...文件 检查 Bundle Identifier,一定要确认跟前面 XCode 填入的是同一个 Bundle Identifier 额外的,如果你是开发 iOS 扩展,两个更多包,那么每个包都需要进入...如果部署过程中发生了任何错误,请: 检查你的步骤与本文是否出入; 参考:使用 Xamarin 开发 iOS 应用需要注意的若干个问题 iPhone 上操作 打开设置 -> 通用 -> 设备管理

    2.2K20

    C# Xamarin移动开发项目实战篇

    由于阿笨学习Xamarin也是“半路出家”,“赶鸭子上架”的状态,视频教学关于Xamarin for Android的知识点难免不足和不完善的地方,希望大家能够多多交流和互相学习。...Nuget命令行输入如下的命令即可。...// 从设置获取指定Key的值,并转换成相应的类型。GetValueOrDefault(stringkey);// 向设置添加制定key的值,如果已存在key则是更新当前值。...3.5、Android漂亮的下拉列表控件(ComboBox Bar) Spinner这个词可能有些陌生,Java,就是ComboBox。...所以说大家不要认为xamarin for android 开发有多么的困难,现在微软也大力更新xamarin,之后对我们开发者来说只有越来越方便的了。

    9.9K50

    移动APP的自动化测试

    开发移动应用,最耗时耗力的就是手动测试APP的每个功能点修复bug。有人就会提议App的业务逻辑可以使用nUnitxUnit测试单元来辅助完成。那用户界面要如何测试?...今天,本文主要介绍如何使用Xamarin提供的UITest来测试app界面。 ?...由于我们正在开发针对Xamarin.Forms控件,因此可通过StyleID 特殊属性Xamarin.UITests的访问权限。...StyleID可以被设置为任意字符串,创建任何测试功能都可以被直接访问,且无论iOSAndroid应用StyleID都是一致的,这就意味着不需要特别管理这些ID。...iOS 设置 打开iOS的AppDelegate.cs 文件,FinishedLaunching方法添加以下代码: 1: Forms.ViewInitialized += (sender,

    2K80

    怎样 Linux 配置静态网络连接

    本指南将向你展示如何使用不同的 Linux 工具检查来自 CentOS/RHEL 机器的网络连接,并讲解如何使用 nmcli 工具添加静态网络配置。...使用nmcli con show显示可用的连接 此截图显示两个设备处于活动状态:enp0s8 和 enp0s3,它们被称为Wired Connection 1 和 2。...步骤5:检查网络连接是否打开 用上面的 ping 可以命令检查是否可以接收数据包,但现在我们要通过 systemctl 命令调用 network 来监视、更新网络状态和排除故障。...用systemctl status network命令检查网络连接是否打开 如果网络支持程序没有问题,那么在运行此命令时,你将看到状态为 active。...用以下命令重新启动网络: 1systemctl restart network 检查状态: 1systemctl status network 步骤10:确认新连接处于活动状态 必须要做这一步!

    2.4K30

    Xamarin 从零开始部署 iOS 上的 Walterlv.CloudKeyboard 应用

    本文将告诉大家如何从零开始 iOS 上部署 Walterlv.CloudKeyboard 应用。...因为我没有 iOS 上找到任何一款稍微能用的输入法,因此只能拜托太子帮我开发一款应用了。太子很给力,帮我开发完成了,但现在的问题就是我如何在我的手机上部署。...点击打开这个应用将会失败,因为无法验证 App 需要信任开发者 ? 添加信任的步骤如下 打开设置,进入通用 ? 进入设备管理界面 ? 可以设备管理界面里面看到自己的证书,点击自己的证书 ?...等待一下网络,可以看到应用状态是已验证 ? 此时再次打开 foo 应用,可以看到应用打开 ?...重新回到 VisualStudio 点击构建部署,此时在手机上可以看到 Xamarin 的图标和部署上的应用 ? VisualStudio 启动调试的时候,可以看到 Xamarin 的界面 ?

    1.1K10

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

    这些库确保你可以 .NET MAUI 应用程序访问 Xamarin.CommunityToolkit 的所有功能,而不会破坏更改,从而帮助你更轻松地迁移到 .NET MAUI。.../ https://www.nuget.org/packages/Xamarin.CommunityToolkit.Markup.MauiCompat/ 1. Visual Studio 打开现有项目...要将命名空间添加到工具包: using Xamarin.CommunityToolkit.Markup; 您的 C# 页面,添加在您的 XAML 页面,添加命名空间属性: xmlns:xct="...您可以只注册实际需要的渲染器,也可以注册 Xamarin 社区工具包内的所有渲染器。看看下面的代码片段如何做到这两点。...我们一个 标记应该有效 该包应该可以正常工作,因为它不依赖于渲染器。我们确实使它与所有当前的 .NET MAUI 更改和命名空间兼容,因此您可以像以前一样继续享受标记扩展。

    2.3K10

    C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识)

    确定一下本篇的学习目标: 1.学会如何调用Camera来实现照相机预览 2.学会如何跳转Activity并传值 3.学会如何识别相机预览的二维码,并读取 效果图: ?...//释放照相机 camera.Release(); camera = null; } 一定要写这些,不然照相机会一直处于占用状态...这样,我们就完成了界面的跳转和获取返回值 3.学会如何识别相机预览的二维码,并读取 下面我们讲讲如何读取相机的二维码. .Net解析二维码,我的知识储备里面...常用的只有2个库,一个是QRCode...所以只能用ZXing.Net 我们nuget搜索ZXing.Net. 如图: ?...所以不要抱怨Xamarin的资料少..你能查到相关的JAVA资料..基本也就搞定Xamarin了..

    1.1K50

    Visual Studio 2017 15.8 版发行说明

    添加了一个选项,用于禁止重新打开已在上一会话打开的文档,因为重新打开某些类型的文件设计器会延迟解决方案加载。 通过“工具”>“选项”>“项目”>“解决方案”>“常规”切换此选项。...CPU 使用率图的颜色出现相应变化,表示该时间点是否启用/禁用示例收集。 ?...打开保存文件时,代码分析可在后台中运行,并且结果显示错误列表,在编辑器显示为绿色波形曲线(图 9)。 ?...源链接允许在编译过程将可执行的库的原始源代码相关信息嵌入 PDB。 调试时,如果程序终止执行,控制台窗口现将默认保持打开状态(类似于没有调试器的情况下运行程序)。...另外,还可以生成 Xamarin.Mac 绑定项目,不过是本地执行生成过程而不是使用本机 Mac 工具链,因此应用运行调试时,不能使用生成的 IL 程序集。

    8.2K10
    领券