You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin使用CommunityToolkit弹窗如何返回值并在主页面动态添加内容

实现方案

1. 修改Popup页面XAML,给时间选择器加命名标识

打开popup.xaml,给两个TimePicker控件添加x:Name属性,方便后台获取选中的时间:

<TimePicker x:Name="FromTimePicker" HorizontalOptions="Center" Time="00:00" />
<Label Text="To Time" Padding="5,5,0,0" TextColor="Black"
    HorizontalTextAlignment="Start" />
<TimePicker x:Name="ToTimePicker" HorizontalOptions="Center"/>

2. 定义活动记录数据类(可选,方便数据传递)

在项目中新建ActivityRecord.cs类,用来统一传递弹窗返回的三个字段:

namespace MReport
{
    public class ActivityRecord
    {
        public TimeSpan FromTime { get; set; }
        public TimeSpan ToTime { get; set; }
        public string ActivityContent { get; set; }
    }
}

3. 编写ADD按钮点击逻辑

打开popup.xaml.cs,补充Button_Clicked_1方法的代码,获取输入值后关闭弹窗并返回数据:

private void Button_Clicked_1(object sender, EventArgs e)
{
    // 可自行添加输入校验逻辑,比如活动内容为空时弹出提示
    var returnData = new ActivityRecord
    {
        FromTime = FromTimePicker.Time,
        ToTime = ToTimePicker.Time,
        ActivityContent = editor_value.Text?.Trim() ?? string.Empty
    };
    // 关闭弹窗并携带返回数据
    Dismiss(returnData);
}

4. 修改主页面逻辑,接收返回值并动态生成展示卡片

第一步:给主页面的容器加命名

打开TabbedPage的XAML文件,给ScrollView内部的StackLayout添加x:Name,方便后续动态添加子控件:

<ScrollView>
    <StackLayout x:Name="ActivityContainer">
        <Label x:Name="lbl01" />
    </StackLayout>
</ScrollView>

第二步:修改弹窗触发方法,接收返回值

打开TabbedPage.xaml.cs,修改Button_Clicked方法为异步方法,接收弹窗返回的数据并生成Frame卡片:

private async void Button_Clicked(object sender, EventArgs e)
{
    // 使用异步弹出方法接收弹窗返回结果
    var popupResult = await Navigation.ShowPopupAsync(new popup01());
    
    // 仅处理点击ADD按钮返回的有效活动数据
    if (popupResult is ActivityRecord record && !string.IsNullOrEmpty(record.ActivityContent))
    {
        // 生成自适应高度的展示Frame
        var displayFrame = new Frame
        {
            CornerRadius = 8,
            Margin = new Thickness(10, 6),
            HasShadow = true,
            BackgroundColor = Color.White
        };

        // 组装Frame内部的内容布局
        var contentStack = new StackLayout { Spacing = 5 };
        contentStack.Children.Add(new Label
        {
            Text = $"时间:{record.FromTime.ToString(@"hh\:mm")} ~ {record.ToTime.ToString(@"hh\:mm")}",
            FontAttributes = FontAttributes.Bold,
            TextColor = Color.Black
        });
        contentStack.Children.Add(new Label
        {
            Text = $"活动内容:{record.ActivityContent}",
            TextColor = Color.DimGray,
            LineBreakMode = LineBreakMode.WordWrap
        });

        displayFrame.Content = contentStack;
        // 将卡片添加到主页面容器
        ActivityContainer.Children.Add(displayFrame);
    }
}

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:54:04