2013-10-19 12 views
5

In Windows 8.1 quando l'impostazione nativa è SettingsFlyout è visibile e faccio clic altrove, nella mia app o in un'altra app, il riquadro a scomparsa scompare.In Windows 8.1 come mantenere SettingsFlyout visibile quando lo stato attivo è impostato altrove?

C'è un modo per mantenerlo visibile finché non lo chiudo manualmente? Il mio caso d'uso: voglio visualizzare "login" SettingsFlyout che non scompare quando l'utente lascia l'app e cerca il suo nome utente e la sua password.

Ho controllato MSDN pages per questo, ma non ho trovato alcuna proprietà semplice per il flyout "Appiccicoso".

Grazie per qualsiasi suggerimento!

risposta

1

Non c'è modo di usare l'API di default per rendere SettingsFlyout "appiccicoso" come AppBar. Il modo migliore per raggiungere il tuo scenario sarebbe creare un Popup personalizzato di ImpostazioniFlyout; lo Callisto library implementa one ed è possibile disattivare IsLightDismissEnabled sul Popup per renderlo "appiccicoso".

+0

Il controllo Callisto che si sta indicando dice OBSOLETE (e deprecato). Ci suggerisce di utilizzare SettingsFlyout fornito da Microsoft. – vivekp

+1

È deprecato se vuoi solo ImpostazioniFlyout. Se si desidera creare un controllo personalizzato simile a SettingsFlyout, è un buon punto di partenza. –

6

C'è un modo per farlo senza utilizzare la libreria Callisto con i controlli predefiniti all'interno dell'SDK.

public class CustomSettingsFlyout : SettingsFlyout 
{ 
    bool back = false; 
    private Popup popup; 
    public void ShowWindow() 
    { 
     ShowIndependent(); 
     back = false; 
     popup = (Parent as Popup); 
     popup.IsLightDismissEnabled = false; 
     popup.Closed += Popup_Closed; 
     this.BackClick += CustomSettingsFlyout_BackClick; 
    } 

    void CustomSettingsFlyout_BackClick(object sender, BackClickEventArgs e) 
    { 
     back = true; 
    } 

    private void Popup_Closed(object sender, object e) 
    { 
     if (!back) popup.IsOpen = true; 
    } 



} 

Ora chiama il metodo ShowWindow è posto di ShowIndependent sul nuovo controllo.

CustomSettingsFlyout flyout = new CustomSettingsFlyout(); 
flyout.Content = new Grid(); 
flyout.ShowWindow(); 
+0

Questo ha funzionato per me, tranne che il flyout si chiude brevemente per poi riaprire la prima volta che si fa clic all'esterno. Ma è anche molto utile quando si esegue il debug di flyout poiché si chiudono quando si inserisce un punto di interruzione. –

+0

@Shubhan - Possiamo ottenere la stessa cosa usando XAML puro senza code-behind? – vivekp

+0

@Shubhan - Quando l'app viene spostata tra 2 schermate di diversa risoluzione, queste impostazioni dell'interfaccia utente vengono incasinate. – vivekp