2015-12-07 14 views
6

Używam kontroli DatePicker xamarin.forms w mojej aplikacji. Mam przycisk i chcę otworzyć popup, w którym chcę pokazać calednar datepicker. Ale obecnie, gdy otwieram okienko wyskakujące, edittexbox wyświetla się z aktualną datą i po dotknięciu pola tekstowego otwiera się kalendarz. Ale nie chcę edycji texbox. Chcę tylko pokazać kalendarz, gdy użytkownik dotknie przycisku. Ktoś wie, jak mogę to zrobić?Otwórz kalendarz datepicker bez pokazywania edittextbox w xamarin.forms

Pozdrawiam, Anand Dubey

Odpowiedz

4

Dokonać kontroli datepicker ukryte przez ustawienie IsVisible=false. Następnie można go uruchomić programowo, wywołując metodę Focus() z dowolnego miejsca w kodzie.

+0

Wielkie dzięki Jason, działa doskonale. Ale mam z tym jeden problem. Nie jestem w stanie obsłużyć przycisku Anuluj w DatePicker w Androidzie. Próbuję utworzyć niestandardowy renderer dla datepicker. Ale nie wiesz, jak uzyskać dostęp do zdarzenia anulowania w nim. Czy masz jakiś pomysł na ten temat? – anand

1

Sprawdź to:

 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(); 
     }; 

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

1

Nieco poprawiła odpowiedź na odpowiedź Jasona. Ustawienie IsVisible w parametrze DatePicker na false i ustawienie go na Focus() działa, jednak może się okazać, że po kliknięciu przycisku Anuluj fokus pozostanie w parametrze DatePicker. Jeśli DatePicker już ma fokus, nie pokaże ponownie okna wyboru daty. Oto kod, który będzie działał zawsze, niezależnie od tego, jak użytkownik wchodzi w interakcję z oknem dialogowym:

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