从 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();
}
我想在每次用户点击我的文本框时打开一个时间选择器选择器。可能吗?我应该怎么做?
我找到了 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();
}