Xamarin.Forms:在代码中关闭 DatePicker,当使用自定义渲染器时
Xamarin.Forms: close DatePicker in code, when custom renderer is used
我有一个习惯DatePicker
, which is opened if the user taps on it. It uses the same mechanics like the Xamarin.Forms DatePicker。场景如下:
- 用户点击自定义
DatePicker
- 他没有选择日期,而是打开了另一个对话框
- 现在可以同时打开两个对话框
我尝试 Unfocus()
如果另一个元素获得焦点,但没有任何反应。 DatePicker
仍然显示。
我还能做什么?我应该手动抛出 Unfocus
事件吗?我可以以某种方式锁定 UI 以便用户在继续之前必须按下 Finish 按钮吗?
首先,如果我在 DatePicker
和 TimePicker
之间切换,则不会出现此问题。只有当我从 DatePicker
/TimePicker
切换到我的 Entry
时才会发生(这会在 Focused
事件中触发自定义对话框)。
并且 Unfocus()
确实有效,如果您在 UI 线程上执行此操作:
private async void someEntry_Focused(object sender, FocusEventArgs e)
{
Device.BeginInvokeOnMainThread(() =>
{
this.datePicker.Unfocus();
});
// custom dialog shown to user ...
}
我有一个习惯DatePicker
, which is opened if the user taps on it. It uses the same mechanics like the Xamarin.Forms DatePicker。场景如下:
- 用户点击自定义
DatePicker
- 他没有选择日期,而是打开了另一个对话框
- 现在可以同时打开两个对话框
我尝试 Unfocus()
如果另一个元素获得焦点,但没有任何反应。 DatePicker
仍然显示。
我还能做什么?我应该手动抛出 Unfocus
事件吗?我可以以某种方式锁定 UI 以便用户在继续之前必须按下 Finish 按钮吗?
首先,如果我在 DatePicker
和 TimePicker
之间切换,则不会出现此问题。只有当我从 DatePicker
/TimePicker
切换到我的 Entry
时才会发生(这会在 Focused
事件中触发自定义对话框)。
并且 Unfocus()
确实有效,如果您在 UI 线程上执行此操作:
private async void someEntry_Focused(object sender, FocusEventArgs e)
{
Device.BeginInvokeOnMainThread(() =>
{
this.datePicker.Unfocus();
});
// custom dialog shown to user ...
}