这可能是愚蠢的,因为我正在学习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&gt;
任何帮助都将不胜感激。
答案 0 :(得分:1)
Textblock实际显示的是DateTime.Value.ValueType
,而不是DateTime.Value的实际值。
Windows.Foundation.IReference
是一个隐藏的界面,在.NET中显示为Nullable<T>
,在C ++ / CX中显示为Platform::IBox
,以及您尝试访问的.Value
属性,是同一界面实现的一部分。
ValueType :: ToString方法重写Object :: ToString方法 并提供ToString方法的默认实现 价值类型。 (值类型是struct关键字定义的类型 C#
DateTime是一个值类型,这就是为什么:: ToString()被ValueType :: ToString重写
您是否可以尝试重载toString,还包括一个参数,指示Date值的所需格式输出,例如“dddd dd MMMM”?
答案 1 :(得分:0)
对于CalendarDatePicker
的DateTime
值,C ++ / CX使用Windows::Foundation::DateTime
结构。详情请参阅DateTime and Calendar values。
直接调用ToString()
将返回该类型,因为您可以查看@AndréB的回复。
我们可能需要根据DateTime结构的备注来获取要转换的DateTime.UniversalTime
值:
要将UniversalTime转换为SYSTEMTIME,请使用ULARGE_INTEGER将int64值转换为FILETIME,然后使用FileTimeToSystemTime获取SYSTEMTIME。
但您可以在UWP应用中使用DateTimeFormatter
课程格式化DataTime
进行展示。有关如何操作的详细信息,请参阅this article和this sample。例如:
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;
}