2015-12-07 14 views
6

Sto usando il controllo DatePicker di xamarin.forms nella mia app. Ho un pulsante e voglio aprire un popup in cui voglio mostrare il calendario di datepicker. Ma attualmente quando apro il popup, edittexbox mostra la data corrente e quando tocco la casella di testo, si apre il calendario. Ma non voglio la modifica di texbox. Voglio solo mostrare il calendario quando l'utente tocca il pulsante. Qualcuno sa come posso fare questo?Apre il calendario di datepicker senza mostrare edittextbox in xamarin.forms

saluti, Anand Dubey

risposta

4

rendere il controllo DatePicker nascosto impostando IsVisible=false. Quindi è possibile attivarlo a livello di programmazione chiamando il metodo Focus() da un'altra posizione nel codice.

+0

Grazie mille Jason, funziona perfettamente. Ma ho un problema con questo. Non sono in grado di gestire il pulsante Annulla di DatePicker in Android. Sto cercando di creare un renderizzatore personalizzato per datepicker. Ma non so come accedere all'evento cancel in esso. Hai qualche idea su questo? – anand

1

Controllare questo:

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

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

1

Un leggermente migliorata risposta su risposta di Jason. Se si imposta IsVisible su DatePicker su false e quindi si imposta su Focus(), è possibile che quando si fa clic su Annulla, il focus rimane su DatePicker. Se DatePicker è già attivo, non mostrerà di nuovo la finestra di dialogo di selezione della data. Ecco un codice che funzionerà sempre indipendentemente da come l'utente interagisce con la finestra di dialogo:

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