2017-04-14 160 views
1

我目前正在使用Blend for Visual Studio 2017中使用工具“TimePicker”的应用程序,并且我正在尝试查找有关事件的问题。选择时间后,我希望在按下检查按钮时发生单独的事件,这会改变时间并按下X按钮取消并从弹出窗口返回。我确实相信我可以使用TimePicker的TimeChanged事件来判断是否按下了检查按钮,但我无法确定哪个事件适用于按下了要取消的X按钮。有人知道吗?UWP TimePicker Visual Studio 2017

回答

0

没有明显的方法来做到这一点。 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!"); 
    } 
} 

把那一个镜头。请让我知道这对你有没有用。你可以把它变成一个实际上的行为......