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

GestureRecognizers触发后调用Focus方法DatePicker不显示问题排查

问题原因

  • 核心原因是_datePicker未加入控件的可视化树:你的构造函数中仅将输入框控件添加到了StackLayout中,_datePicker、_timePicker没有作为子控件加入布局,即使设置IsVisible = true也不会被平台渲染,调用Focus()方法自然无法触发弹窗。
  • 焦点冲突:_dayEntry获取焦点时会弹出系统软键盘,直接调用_datePicker.Focus()会和软键盘的焦点抢占逻辑冲突,导致选择器无法获得焦点。
  • 调用时机问题:部分平台(如Android)要求控件完成渲染后才能触发焦点弹窗,未加入可视化树的控件永远不会进入渲染流程。

解决方案

步骤1:将选择器加入可视化树

修改构造函数的布局逻辑,外层套一层垂直布局,把两个隐藏的选择器加入子控件列表:

public DateTimePicker2()
{
    BindingContext = this;

    _dayEntry.TextChanged += _dayEntry_TextChanged;
    _dayEntry.Focused += _dayEntry_Focused;
    _monthEntry.TextChanged += _monthEntry_TextChanged;
    _yearEntry.TextChanged += _yearEntry_TextChanged;
    // 外层使用垂直布局,同时容纳输入区和隐藏的选择器
    Content = new StackLayout()
    {
        Orientation = StackOrientation.Vertical,
        Children =
        {                        
            // 原有水平排列的输入区
            new StackLayout()
            {
                Orientation = StackOrientation.Horizontal,
                Children = 
                {
                    _dayEntry,
                    _monthEntry,
                    _yearEntry,
                    _hourEntry,
                    _minsEntry,
                    _ampmPicker
                }
            },
            // 加入两个选择器,初始不可见不占用显示空间
            _datePicker,
            _timePicker
        }
    };
}

步骤2:修改焦点处理逻辑,避免冲突

修改_dayEntry的Focused事件,先取消输入框自身焦点,加短延迟等待焦点转移完成后再触发选择器焦点:

_dayEntry.Focused += async (sender, args) =>
{
    // 先取消输入框焦点,关闭弹出的软键盘
    _dayEntry.Unfocus();
    // 短延迟等待焦点转移完成,避免冲突
    await Task.Delay(10);
    Device.BeginInvokeOnMainThread(() => 
    {
        _datePicker.IsVisible = true;
        _datePicker.Focus();
    });
};

步骤3:优化选择器关闭逻辑

选择器失焦后隐藏,避免占用布局空间:

_datePicker.Unfocused += (sender, args) =>
{
    Device.BeginInvokeOnMainThread(() =>
    {
        // 选择完成后隐藏选择器
        _datePicker.IsVisible = false;
        _timePicker.Focus();
        _date = _datePicker.Date;
        UpdateEntryText();
    });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:03