[英]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.