使用 UWP CalendarDatePicker 会在 Windows.Foundation.IReference'1 <Windows.Foundation.DateTime> 中生


这可能是

愚蠢的,因为我刚刚学习UWP,并认为我会尝试制作一个使用CalendarDatePicker的工具,但是我无法让它显示在框中输入的日期。

XAML

<TextBlock x:Name="dateOutput"/>
<CalendarDatePicker x:Name="OrderDate" DateChanged="ChangeOrderDate"/>

C++

void OrderService::MainPage::ChangeOrderDate(Windows::UI::Xaml::Controls::CalendarDatePicker^ sender, Windows::UI::Xaml::Controls::CalendarDatePickerDateChangedEventArgs^ args)
{
dateOutput->Text = OrderDate->Date->Value.ToString();
}

当我运行此代码时,我可以选择一个日期,但显示的内容如下:

Windows.Foundation.IReference'1 Windows.Foundation.DateTime>

任何帮助将不胜感激。

文本块上实际显示的是DateTime.Value.ValueType,而不是 DateTime.Value 的实际值。

Windows.Foundation.IReference是一个隐藏接口,在 .NET 中显示为Nullable<T>,在 C++/CX 中显示为Platform::IBox,并且您尝试访问.Value属性是同一接口实现的一部分。

方法覆盖 Object::ToString 方法 并提供 ToString 方法的默认实现 值类型。(值类型是由 struct 关键字定义的类型 C#

DateTime 是一种值类型,这就是为什么 ::ToString(( 被 ValueType::ToString 覆盖的原因

您可以尝试重载 toString 吗,还包括一个参数,指示您的日期值所需的格式输出是什么,例如"dddd dd MMMM"?

对于CalendarDatePickerDateTime值,C++/CX 使用Windows::Foundation::DateTime结构。详细信息请参考日期时间和日历值。直接调用 ToString() 将返回类型,因此您可以检查 @André B 的回复。

我们可能需要根据日期时间结构的备注获取要转换的DateTime.UniversalTime值:

若要将 UniversalTime 转换为 SYSTEMTIME,请使用 ULARGE_INTEGER 将 int64 值转换为 FILETIME,然后使用 FileTimeToSystemTime 获取 SYSTEMTIME。

但是,你可以只使用 UWP 应用中DateTimeFormatter类来格式化DataTime以进行显示。有关如何执行操作的详细信息,请参阅本文和此示例。例如:

void CCalendar::MainPage::ChangeOrderDate(Windows::UI::Xaml::Controls::CalendarDatePicker^ sender, Windows::UI::Xaml::Controls::CalendarDatePickerDateChangedEventArgs^ args)
{ 
    DateTime current = OrderDate->Date->Value; 
    Array<DateTimeFormatter^> ^dateFormatters = {
        ref new DateTimeFormatter("shortdate"),
        ref new DateTimeFormatter("longdate"),
        ref new DateTimeFormatter("shorttime"),
        ref new DateTimeFormatter("longtime")
    };
    String^ results = ""; 
    // Generate the results.
    for (auto formatter : dateFormatters)
    {
        // Perform the actual formatting. 
        results = results + formatter->Template + ": " + formatter->Format(current) + "n";
    }
    dateOutput->Text = results;  
}

相关内容

最新更新