如何从内置日历应用程序中隐藏我的应用程序日历?

How to hide my app's calendar from built-in calendar app?

我的应用程序需要一个内部日历。我可以像这样创建一个新日历:

var store = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
var cacheCalendar = await store.CreateAppointmentCalendarAsync("unique name here");

这成功了,我得到了一个新日历。但是这个日历在 phone 的内置日历应用程序中是可见的。 我不希望此日历可见,因为它用于内部簿记。

所以我试着像这样隐藏日历:

var store = await AppointmentManager.RequestStoreAsync(AppointmentStoreAccessType.AppCalendarsReadWrite);
var cacheCalendar = await store.CreateAppointmentCalendarAsync("unique name here");
cacheCalendar.IsHidden = true; // <---- make calendar hidden
await cacheCalendar.SaveAsync(); // <---- save; error here

调用 SaveAsync 时出现以下异常:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"

为什么我不能从内置的 phone 日历应用程序中隐藏我的日历?这是一个未记录的限制吗?还有其他方法吗?

(注意:我在 Windows 10 Mobile 和桌面 Win 10 上测试了这个 - 同样的错误。)

Edit/Addition:由于 Anthony 发现 IsHidden 属性 在 MSDN 中被记录为只读,这里是来自 Visual Studio 显示 public setter (这使得它编译,运行 并且看起来合法调用):

(该应用程序针对 Win 10 Build 10586 - 也许是新的,但未完成?)

老实说,我很惊讶这竟然能编译。

According to the MSDN documentation 对于 AppointmentCalandar

IsHidden - Read-only - Gets whether the AppointmentCalendar is hidden in the device's built-in calendar UI

这是一个read only property and can't be set

至于您的实际问题,在仔细查看文档后发现这是 API 中的一个疏忽。我会在 MSDN 论坛上提出这个问题。

这是 10586 中的错误,但如果您使用的是 14393 SDK,并且您的应用有权访问日历且没有 InvalidAccessException,则可以使用 IsHidden

https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/15278775-appointmentcalendar-ishidden-setter-throws-a-inval