2016-05-01 33 views
9

Sto usando Xamarin.forms e ho bisogno di avere un modulo di accesso in una visualizzazione a finestra come nell'immagine seguente:Come creare un modulo in un pop-up usando xamarin.forms?

https://github.com/michaeled/FormsPopup/blob/master/pictures/androidPopup.gif?raw=true

Proprio ora sto usando PushModalAsync, tuttavia questo rende la nuova pagina con la forma copre l'intero schermo, invece di mostrare solo una vista popup come voglio.

C'è un modo per farlo usando xamarin.forms? In caso contrario, esiste già un'alternativa cross-platform (Android, iOS e UWP) già implementata?

risposta

11

La mia esperienza dice che XLabs' PopupLayout doesn't work properly sometimes. Ma c'è una libreria davvero carina che permette di creare popup complessi: Rg.Plugins.Popup. L'unico problema: manca l'implementazione UWP (ma è going to be released).

+0

Grazie per l'aiuto, ma in questo caso è necessaria l'implementazione uwp. –

+1

[Rg.Plugins.Popup] (https://github.com/rotorgames/Rg.Plugins.Popup) Prerelease (1.0.0-pre1) supporta già WinPhone e UWP. Sarei felice se accetti di partecipare al beta test. – user1658602

4

XLabs ha un PopupLayout che è possibile utilizzare per eseguire questa operazione.

  var pop = new XLabs.Forms.Controls.PopupLayout(); 

      // PatientSearch is a ContentView I was to display in the popup 
      var search = new PatientSearch(data, this); 
      search.WidthRequest = 600; 
      search.HeightRequest = 500; 
      search.BackgroundColor = new Color (1, 1, 1, 0.8); 
      pop.ShowPopup(search); 
+0

Grazie per la risposta. Purtroppo ricevo un errore NullReferenceException (https://github.com/XLabs/Xamarin-Forms-Labs/issues/1107#issuecomment-197701086). Sai come risolverlo? –

0

Una soluzione comune che ho usato è quello utilizzato per risolvere questo è quello di creare uno stackLayout con tutta la forma dentro e inserirla bambini della pagina che si sta utilizzando, ad esempio:

PopupPage popUp; //This will be the layout of the form 

Page : ContentPage { 

    var gird = new Gird(); 

    popUp = PopupPage(); 
    popUp.IsVisible = false; 

    var mainContainer = new StackLayout(); 

    mainContainer.Children.Add(All you UI stuff..); 

    var btn = new Button(); 
    btn.Clicked += OnButtonClicked; 

    grid.Children.Add(mainContainer,0,0); 
    grid.Children.Add(popUp,0,0); 

} 

So in order to show the popoUP you need to play with the IsVisible property, for example: 

void OnButtonClicked(){ 

    //You can center the popup using Vertical options or whatever you need 
    //and to resize the pop up you can do different calculations like 
    //popUp.Width = ScreenWidth/2 and popUp.Height = ScreenWidth/2 
    popUp.IsVisile = true; 

} 

E questo funziona per tutte le piattaforme, l'unico svantaggio è che non si avrà il layout trasparente, ma per questo si può usare:

https://github.com/gaborv/xam-forms-transparent-modal