[英]UWP TimePicker Visual Studio 2017
我目前正在开发一个在Blend for Visual Studio 2017中使用“TimePicker”工具的应用程序,我对我正在尝试查找的事件有疑问。 选择一段时间后,我希望在按下检查按钮时发生单独的事件,这会改变时间,如果按下X按钮取消并从弹出按钮返回。 我相信我可以使用TimePicker的TimeChanged事件来判断是否按下了检查按钮,但如果按下取消的x按钮,我无法确定哪个事件适用。 有人知道吗?
没有明显的方法可以做到这一点。 TimePickerFlyoutPresenter
有一个Dismiss按钮,但是访问它是不够的。 您还需要管理键盘快捷键,例如[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!");
}
}
试一试。 请让我知道这对你有没有用。 你可以把它变成一种行为......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.