【问题标题】:UWP TimePicker Visual Studio 2017UWP 时间选择器 Visual Studio 2017
【发布时间】:2017-04-14 14:14:59
【问题描述】:
我目前正在开发一个使用 Blend for Visual Studio 2017 中的“TimePicker”工具的应用程序,并且我对要查找的事件有疑问。选择时间后,我希望在按下更改时间的检查按钮以及按下 X 按钮取消并从弹出菜单返回时发生单独的事件。我确实相信我可以使用 TimePicker 的 TimeChanged 事件来判断是否按下了检查按钮,但我无法确定如果按下要取消的 x 按钮,哪个事件会起作用。有人知道吗?
【问题讨论】:
标签:
c#
xaml
uwp
visual-studio-2017
timepicker
【解决方案1】:
没有明显的方法可以做到这一点。 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!");
}
}
试一试。请让我知道这对你有没有用。您实际上可以将其变成一种行为...