3.确认弹窗(ConfirmPopup)

本文介绍了如何在.NET7环境中基于Maui库封装确认弹窗,提供只确认和可选择确认两种模式,通过构造函数和回调功能简化开发过程,并给出了使用示例。
摘要由CSDN通过智能技术生成

愿你出走半生,归来仍是少年! 

环境:.NET 7

        在开发中,最常用的弹窗之一表示确认弹窗,为了减少重复的开发工作,所以需要基于Popup进行封装。

1.布局

        分为标题、确认内容、按钮三个区域,都是可供调整的。

<?xml version="1.0" encoding="utf-8" ?>
<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiLib.Utility.Controls.Popups.ConfirmPopup"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             x:Name="popup" 
                xmlns:config="clr-namespace:MauiLib.Utility.Configs;assembly=MauiLib.Utility"
             Color="Transparent" 
               
              >

    <VerticalStackLayout x:Name="outLyt"     BackgroundColor="Transparent">

        <Border  WidthRequest="400"   BackgroundColor="White"  StrokeThickness="1"  StrokeShape="RoundRectangle 10,10,10,10"  HorizontalOptions="Center">

            <VerticalStackLayout  >

                <Label x:Name="lbTitle" Text="标题" HorizontalOptions="Center" Padding="0,10,0,10" FontSize="18"/>

                <Border Stroke="{Static config:ThemeConfig.SubTitle}" BackgroundColor="{Static config:ThemeConfig.SubTitle}" WidthRequest="400" StrokeThickness="0.2"  />

                <Label x:Name="lbContent" 
                       Margin="15" 
                       FontSize="14" 
                       MinimumHeightRequest="100" 
                       VerticalOptions="CenterAndExpand" 
                       Text="确认内容"/>

                <FlexLayout AlignContent="Center" AlignItems="Stretch" Direction="Row">
                    <Button x:Name="btnCancle" 
                      BackgroundColor="Transparent" 
                      TextColor="Black"  
                      FlexLayout.Grow="1"  
                      BorderColor="{Static config:ThemeConfig.SubTitle}"
                      BorderWidth="0.2"
                      CornerRadius="0"   
                      Text="取消" 
                      Clicked="btnCancle_Clicked" />

                    <Button x:Name="btnOk"   
                        BackgroundColor="Transparent" 
                        TextColor="Black"   
                        FlexLayout.Grow="1"  
                        BorderColor="{Static config:ThemeConfig.SubTitle}"
                        BorderWidth="0.2"
                        CornerRadius="0"
                        Text="确认" 
                        Clicked="btnOk_Clicked"/>





                </FlexLayout>


            </VerticalStackLayout>
        </Border>
    </VerticalStackLayout>
</toolkit:Popup>

2.代码

        通过两个不同的构造函数,实现只确认和可选择确认的两种弹窗对象。然后通过回调的方式实现选择后的操作。

public partial class ConfirmPopup : CommunityToolkit.Maui.Views.Popup
{
    private Action OkAction;

    private Action CancleAction;

    /// <summary>
    /// 只确认
    /// </summary>
    /// <param name="title">标题</param>
    /// <param name="content">内容</param>
    /// <param name="okAction">确认回调</param>
    /// <param name="okText">确认按钮文本</param>
    public ConfirmPopup(string title,string content,Action okAction=null,string okText="确认")
	{
		InitializeComponent();

        lbTitle.Text = title;

        lbContent.Text = content;

        btnOk.Text = okText;

        this.OkAction = okAction;

        btnCancle.IsVisible = false;
	}

    /// <summary>
    /// 可确认、取消
    /// </summary>
    /// <param name="title">标题</param>
    /// <param name="content">内容</param>
    /// <param name="okAction">确认回调</param>
    /// <param name="cancleAction">取消回调</param>
    /// <param name="okText">确认按钮文本</param>
    /// <param name="cancleText">取消按钮文本</param>
    public ConfirmPopup(string title, string content, Action okAction,Action cancleAction,string okText="确认",string cancleText="取消")
    {
        InitializeComponent();

        lbTitle.Text = title;

        lbContent.Text = content;

        btnOk.Text = okText;

        btnCancle.Text = cancleText;
         
        this.OkAction = okAction;

        this.CancleAction = cancleAction;
         
    }

    private void btnOk_Clicked(object sender, EventArgs e)
    {
        OkAction?.Invoke();

        this.Close(true);
    }

    private void btnCancle_Clicked(object sender, EventArgs e)
    {
        CancleAction?.Invoke();

        this.Close(false);
    }
}

3.使用

3.1.只需确认的弹窗

ConfirmPopup popup = new ConfirmPopup("通知","当前版本为测试版本,若出现闪退等情况请及时联系管理员进行修复!",null);

this.ShowPopup(popup);

3.2.可选择的确认弹窗

ConfirmPopup popup = new ConfirmPopup("通知", 
    "当前版本为测试版本,若出现闪退等情况请及时联系管理员进行修复!",
    async () =>
    {
      await  Toast.Make("已提交修复工单").Show();
    },
   async () =>
    {
        await Toast.Make("已取消").Show();
    });

this.ShowPopup(popup);

4.效果

只确认的弹窗

 

可选择的弹窗确认
可以使用以下代码来修改 window.confirm 弹窗的按钮文字: ``` // 保存原始的 confirm 方法 var originalConfirm = window.confirm; // 重写 confirm 方法 window.confirm = function(message) { // 创建一个新的 Promise 对象 return new Promise(function(resolve, reject) { // 创建一个确认弹窗 var confirmPopup = document.createElement("div"); confirmPopup.classList.add("confirm-popup"); // 创建文本节点,并插入到确认弹窗中 var messageNode = document.createTextNode(message); confirmPopup.appendChild(messageNode); // 创建确认按钮,并插入到确认弹窗中 var confirmButton = document.createElement("button"); confirmButton.classList.add("confirm-button"); confirmButton.innerText = "我的确认按钮文字"; confirmPopup.appendChild(confirmButton); // 创建取消按钮,并插入到确认弹窗中 var cancelButton = document.createElement("button"); cancelButton.classList.add("cancel-button"); cancelButton.innerText = "取消"; confirmPopup.appendChild(cancelButton); // 将确认弹窗插入到文档中 document.body.appendChild(confirmPopup); // 绑定确认按钮的点击事件处理程序 confirmButton.addEventListener("click", function() { // 从文档中移除确认弹窗 document.body.removeChild(confirmPopup); // 调用原始的 confirm 方法,并传入 true resolve(true); }); // 绑定取消按钮的点击事件处理程序 cancelButton.addEventListener("click", function() { // 从文档中移除确认弹窗 document.body.removeChild(confirmPopup); // 调用原始的 confirm 方法,并传入 false resolve(false); }); }); }; // 在代码中使用修改后的 confirm 方法 window.confirm("请确认你的选择。").then(function(result) { if (result) { console.log("你点击了确认按钮。"); } else { console.log("你点击了取消按钮。"); } }); // 恢复原始的 confirm 方法 window.confirm = originalConfirm; ``` 在上面的代码中,我们首先保存了原始的 confirm 方法,然后重写了它。重写后的 confirm 方法返回一个 Promise 对象,通过创建一个自定义的确认弹窗来替代原始的确认弹窗。在自定义的确认弹窗中,我们可以根据需要修改确认按钮的文字。最后,我们在代码中使用修改后的 confirm 方法,并在结果中处理用户的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是那个帕吉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值