没有明显的方法来做到这一点。 TimePickerFlyoutPresenter
中有一个关闭按钮,但只能访问这些是不够的。您还需要管理键盘快捷键,如[ESC]键。
你让我有点好奇如何破解它,所以这是我到目前为止所提出的。这是一个TimePickerDismissal
类,我真的很快被砍了。这个想法是,如果TimePicker
在弹出一个弹出窗口并且没有报告时间改变后获得焦点,那么它被认为是解雇。
public class TimePickerDismissal
{
private bool _active;
private bool _timeChanged;
public event EventHandler Dismissed;
public TimePickerDismissal(TimePicker timer)
{
timer.GotFocus += OnTimeGotFocus;
timer.LostFocus += OnTimeLostFocus;
timer.TimeChanged += OnTimeChanged;
}
private void OnTimeGotFocus(object sender, RoutedEventArgs e)
{
if (!_active)
{
return;
}
_active = false;
if (!_timeChanged)
{
Dismissed?.Invoke(this, EventArgs.Empty);
}
_timeChanged = false;
}
private void OnTimeLostFocus(object sender, RoutedEventArgs e)
{
var selector = FocusManager.GetFocusedElement() as LoopingSelector;
if (selector == null)
{
return;
}
_active = true;
}
private void OnTimeChanged(object sender, TimePickerValueChangedEventArgs e)
{
_timeChanged = true;
}
}
下面是如何使用它:
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
var dismissal = new TimePickerDismissal(MyTimePicker);
dismissal.Dismissed += OnTimerDismissed;
}
private void OnTimerDismissed(object sender, EventArgs e)
{
Debug.WriteLine("TimePicker dismissed!");
}
}
把那一个镜头。请让我知道这对你有没有用。你可以把它变成一个实际上的行为......