繁体   English   中英

UWP TimePicker Visual Studio 2017

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM