簡體   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