Come rilevare modifiche di orientamento e modificare il layout?

Permette di dire che ho una tabella con 2 righe e 2 colonne e molti controlli all’interno di ogni cella.

Quando l’applicazione viene modificata la modalità snap, volevo dire 1/3 dello schermo vorrei che l’applicazione sia solo una Colonna con 2 righe e mostrare solo alcuni controlli vorrei decidere.

Che tipo di controllo devo per questo?

thx

 

3 Replies
  1. 8

    Si dovrebbe fare uso di VisualStateManager in xaml, per un totale di xaml soluzione:

    <Grid x:Name="LayoutRoot">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="OrientationStates">
                <VisualState x:Name="Full"/>
                <VisualState x:Name="Fill"/>
                <VisualState x:Name="Portrait"/>
                <VisualState x:Name="Snapped"/>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </Grid>

    Creazione di Storyboard per ogni VisualState e nascondi/mostra elementi in xaml. Microsoft esempi di utilizzare la stessa soluzione.

    Aggiornamento

    Ho cercato in rete e trovato la propria stati, un esempio è dietro a questo link: MSDN.

     <VisualStateManager.VisualStateGroups>
         <VisualStateGroup x:Name="ApplicationViewStates">
            <VisualState x:Name="FullScreenLandscape"/>
            <VisualState x:Name="Filled"/>
            <VisualState x:Name="FullScreenPortrait"/>
            <VisualState x:Name="Snapped"/>
        </VisualStateGroup>
     </VisualStateManager.VisualStateGroups>

    Stati riflettere il ApplicationViewState enum. Ulteriori informazioni possono essere trovate qui.

    • per cortesia, puoi approfondire la tua risposta pi?, con il vostro aiuto ho potuto ottenere questo link, markermetro.com/2011/11/technical/…, quindi significa che devo scrivere un layout diverso per ogni stato visivo, e riassociare i dati su ogni cambiamento di orientamento per la corretta controlli a seconda dello stato?
    • Sì! Questa è davvero la più bella, xaml solo, la soluzione, per quanto ne so. Si potrebbe con qualche abile storyboard riutilizzare alcuni elementi, ma nella maggior parte dei casi è necessario creare diversi layout. Se si potrebbe essere saggio per farle separare controlli utente o Vista e includono quelli.
    • Scusate, ero un po ‘ ristretta. Microsoft ha creato una classe di Pagina di base che supporta questi VisualStates. Ho aggiornato il mio post con un più utilizzabile esempio…
  2. 9

    Utilizzando DisplayProperties.OrientationChanged evento (come suggerito da @Jan K.) potrebbe non essere esattamente quello che stai cercando, considerando la sezione osservazioni a questo evento:

    Il DisplayProperties.OrientationChanged evento si verifica solo quando l’orientamento del display o monitor di modifiche e non necessariamente quando l’orientamento della vostra applicazione delle modifiche. Per determinare l’orientamento delle app per il layout, utilizzare il ApplicationView.Valore proprietà.

    ma dal momento che ApplicationView.Valore probabilmente verrà abbandonato dopo Windows 8.1 versione di MS consiglia di utilizzare ApplicationView.GetForCurrentView() invece:

    ApplicationView i metodi statici possono essere alterati o non è disponibile per le versioni dopo l’installazione di Windows 8.1 Preview. Invece, utilizzare ApplicationView.GetForCurrentView() per ottenere un’istanza di ApplicationView.

    Quindi per ora ho a finire con quel codice (un tipo di visualizzazione dinamica e non può pre-design tutto in XAML via VisualStateManager, purtroppo):

    public MainPage()
    {
        InitializeComponent();
        Window.Current.SizeChanged += (sender, args) =>
        {
            ApplicationView currentView = ApplicationView.GetForCurrentView();
    
            if (currentView.Orientation == ApplicationViewOrientation.Landscape)
            {
                //when args.Size.Width > args.Size.Height
            }
            else if (currentView.Orientation == ApplicationViewOrientation.Portrait)
            {
                //when args.Size.Width < args.Size.Height
            }
        };
    }

Lascia un commento