从 uwp 中的文本框打开 timePicker

Open timePicker from textbox in uwp

我想在每次用户点击我的文本框时打开一个时间选择器选择器。可能吗?我应该怎么做?

我找到了 post:C# WP8 Open TimePicker from code

但我无法让它工作,因为 visual studio 说 "PickerPageUri " 方法不可用或不存在。

I want to open a timepicker selector each time the user taps over my textbox. Is it possible?

是的,有可能。

您可以使用 TimePickerFlyout 来执行此操作,例如:

XAML代码:

<TextBox VerticalAlignment="Center" PointerEntered="TextboxPointEntered">
    <FlyoutBase.AttachedFlyout>
        <TimePickerFlyout />
    </FlyoutBase.AttachedFlyout>
</TextBox>

以及后面的代码:

private void TextboxPointEntered(object sender, PointerRoutedEventArgs e)
{
    FlyoutBase.ShowAttachedFlyout(sender as TextBox);
}

如果你想通过代码添加FlyoutBase,你可以这样做:

protected override void OnNavigatedTo(NavigationEventArgs e)
{          
    TextBox tbox = new TextBox();
    tbox.VerticalAlignment = VerticalAlignment.Center;
    tbox.PointerEntered += Tbox_PointerEntered;

    TimePickerFlyout timepickerFlyout = new TimePickerFlyout();
    FlyoutBase.SetAttachedFlyout(tbox, timepickerFlyout);

    rootGrid.Children.Add(tbox);
}

private void Tbox_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    FlyoutBase.ShowAttachedFlyout(sender as TextBox);
}
此代码中的

rootGrid代表当前页面的Grid名称。

要在TextBox中显示TimePicker中选择的时间,你可以这样做:

private TimePickerFlyout timepickerFlyout = new TimePickerFlyout();
private TextBox tbox = new TextBox();

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    tbox.VerticalAlignment = VerticalAlignment.Center;
    tbox.PointerEntered += Tbox_PointerEntered;

    FlyoutBase.SetAttachedFlyout(tbox, timepickerFlyout);
    timepickerFlyout.Closed += TimepickerFlyout_Closed;

    rootGrid.Children.Add(tbox);
}

private void Tbox_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    FlyoutBase.ShowAttachedFlyout(tbox);
}

private void TimepickerFlyout_Closed(object sender, object e)
{
    tbox.Text = timepickerFlyout.Time.ToString();
}