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

.NET MAUI TimePicker在Windows运行时出现空引用异常问题

问题描述

我有一个名为timePicker3的TimePicker控件,在Android模拟器上运行应用时,标签lblShowTime可正常展示选中的时间;但在Windows设备上运行时,会抛出**"Object reference not set to an instance of an object"**错误。

相关代码

XAML代码

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MyApp___Samples.DatePickerPage"
         Title="DatePickerPage">
<VerticalStackLayout Padding="10">
          
    <Label x:Name="lblShowTime" />

    <TimePicker x:Name="timePicker3"
                Time="4:59:7"
                HorizontalOptions="Center"
                Format="T"
                PropertyChanged="TimePicker3_PropertyChanged"
                />
 </VerticalStackLayout>
</ContentPage>

C#后台代码

namespace MyApp___Samples;
public partial class DatePickerPage : ContentPage
{
public DatePickerPage()
{
    InitializeComponent();
}

private void TimePicker3_PropertyChanged(object sender, 
 System.ComponentModel.PropertyChangedEventArgs e)
{
    lblShowTime.Text = timePicker3.Time.ToString();        
}
}
问题原因分析

这个空引用错误的核心原因是Windows平台上TimePicker的PropertyChanged事件会在页面控件初始化完成前提前触发:

  • Android平台的控件初始化逻辑是先完成所有页面元素的实例化,再触发TimePicker初始属性变更的事件,此时lblShowTime已经存在,不会报错;
  • 但Windows平台中,TimePicker的初始Time属性赋值会在lblShowTime标签完成实例化前触发PropertyChanged事件,这时lblShowTime还是null,访问其Text属性就会抛出空引用异常。

另外,代码中直接访问全局的timePicker3也存在潜在风险,建议改用sender参数获取当前TimePicker实例,并增加null检查,修改后的事件处理代码如下:

private void TimePicker3_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if (sender is TimePicker picker && lblShowTime != null)
    {
        lblShowTime.Text = picker.Time.ToString();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:42:45