Откройте календарь datepicker без отображения edittextbox в xamarin.формы

Я использую элемент управления DatePicker xamarin.формы в моем приложении.У меня есть кнопка, и я хочу открыть всплывающее окно, в котором я хочу показать calednar datepicker. Но в настоящее время, когда я открываю всплывающее окно, edittexbox показывает текущую дату, а когда я нажимаю на текстовое поле, открывается календарь. Но я не хочу редактировать texbox. Я просто хочу показать календарь, когда пользователь нажимает на кнопку. Кто-нибудь знает, как я могу это сделать?

с уважением, Ананд Дубей!--1-->

3 ответов


сделайте элемент управления DatePicker скрытым, установив IsVisible=false. Затем вы можете вызвать его программно, вызвав Focus() метод из другого места в коде.


проверить это :

        DatePicker datePicker = new DatePicker
        {
            Format = "D",
            VerticalOptions = LayoutOptions.CenterAndExpand,
            IsVisible =false,
            IsEnabled = false
        };

        Button button = new Button
        {
            Text = "Date",
            VerticalOptions = LayoutOptions.CenterAndExpand
        };
        button.Clicked += (object sender, EventArgs e) =>
        {
            IsEnabled = true;
            datePicker.Focus();
            button.Text = datePicker.Date.ToString();
        };

см. : https://developer.xamarin.com/api/type/Xamarin.Forms.DatePicker/


немного улучшенный ответ на ответ Джейсона. Настройка IsVisible на DatePicker в false, а затем установите его в Focus() работает, однако, вы можете обнаружить, что при нажатии кнопки Отмена фокус остается на DatePicker. Если DatePicker уже имеет фокус, он не будет показывать диалоговое окно выбора даты снова. Вот код, который всегда будет работать независимо от того, как пользователь взаимодействует с диалогом:

        DatePickerTapRecogniser.Tapped += (object sender,
                                           EventArgs e) => {
            Device.BeginInvokeOnMainThread (() => {
                if (DatePickerComponent.IsFocused) {
                    DatePickerComponent.Unfocus ();
                }
                DatePickerComponent.Focus ();
            });
        };