【问题标题】: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!");
        }
    }
    

    试一试。请让我知道这对你有没有用。您实际上可以将其变成一种行为...

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      相关资源
      最近更新 更多