在TextBox上实现DatePicker / DatePickerFlyout

时间:2015-08-12 18:39:54

标签: c# xaml windows-phone windows-10

我正在使用Windows 10 Universal应用程序,我对如何在文本框点击上实现DatePicker感到困惑。一旦我点击Textbox,我就想让datepicker显示出来。 我尝试过Tapped和OnFocus事件并使用C#调用datepicker,但这没有帮助。 是他们以任何其他方式实现它。

1 个答案:

答案 0 :(得分:3)

背景

实际UI控件中UWP中的CalendarDatePicker。这意味着它拥有自己的事件,UI和使用方式。

这意味着如果我将一个简单的CalendarDatePicker添加到我的UI中:

        var picker = new CalendarDatePicker();
        mainGrid.Children.Add(picker);

我会生成这样的控件:

Image showing a closed CalendarDatePicker

如果我按“选择日期”按钮:

Image showing a open CalendarDatePicker calendar view

我的建议是使用它,因为他们已经解决了很多问题并为你创造了一切。但是,如果您真的想使用自己的TextBox,那么没有什么能阻止您这样做。这有点麻烦。

解决初始问题

这是一个用于在聚焦TextBox时显示日历视图的选项:

    private void CalendarDatePicker_DateChanged(CalendarDatePicker sender, CalendarDatePickerDateChangedEventArgs args)
    {
        calendar.IsCalendarOpen = false;
        textBox.Text = args.NewDate?.DateTime.ToString("dd/MM/yyyy");
    }

    private void textBox_GotFocus(object sender, RoutedEventArgs e)
    {
        calendar.IsCalendarOpen = true;
    }

相应的XAML:

    <TextBox x:Name="textBox" PlaceholderText="Press me!" Tapped="Btn_Tapped" GotFocus="textBox_GotFocus" Height="100" />
    <CalendarDatePicker x:Name="calendar" Width="0" Height="0" DateChanged="CalendarDatePicker_DateChanged" />

PS。诀窍是将CalendarDatePicker高度和宽度设置为零,这使得实际按钮不可见,但在设置IsCalendarOpen = true

时仍然可以看到日历弹出按钮

我希望有所帮助。很想听到有关答案的反馈或批评:)

祝你有个美好的一天!