Meine Werkzeuge
Namensräume
Varianten

ApplicationViewState/CSharp

Aus indiedev
Wechseln zu: Navigation, Suche
Tutorial
ApplicationViewState
Autor rene87
Programmier­sprache CSharp
Kategorie C#-Tutorials
Diskussion Thread im Forum
Lizenz indiedev article license

Nach dem ich im Artikel ApplicationViewState beschrieben habe, möchte ich hier jetzt zeigen was man machen muss um heraus zu finden in welchen ApplicationViewState man sich befindet und wie auf Wechsel dieser Reagieren kann. Da wir eine Metro App schreiben brauchen wir Visual Studio 11 und Windows 8. Nachdem wir Visual Studio gestartet haben erstellen wir eine neue Blank Application in C#/ Windows Metro style

ApplicationViewState6.PNG

Inhaltsverzeichnis

BlankPage.xaml

Um zu sehen in welchen State wir gerade sind fügen wir einfach einen TextBlock ins Grid ein und gebnen ihn den Namen Textblock


<TextBlock x:Name="Textblock" HorizontalAlignment="Center" Margin="0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Center"/>

BlankPage.xaml.cs

In der BlankPage.xaml.cswollen wir uns zuerst auf das Event registiren welches kommt, wenn sich der ApplicationViewState verändert. Dazu fügen wir im Konstrucktor folgende Zeilen ein.


            Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().ViewStateChanged +=
              new TypedEventHandler<ApplicationView, ApplicationViewStateChangedEventArgs>(this.OnViewStateChanged);
            ChangeText(Windows.UI.ViewManagement.ApplicationView.Value.ToString());

Wir registrieren auf das Event ViewStateChanged einen Eventhandler der uns ApplicationViewStateChangedEventArgs liefert.

Das ChangeText(Windows.UI.ViewManagement.ApplicationView.Value.ToString()); haben wir nur, damit gleich der richtige State angezeigt wird.

Die Funktion die wir dem Eventhandler mit übergeben haben ist OnViewStateChanged welche bei uns wie folgt aussieht.


        private void OnViewStateChanged(ApplicationView sender, ApplicationViewStateChangedEventArgs args)
        {
            switch (args.ViewState)
            {
                case ApplicationViewState.Filled:
                    ChangeText("Filled");
                    break;
                case ApplicationViewState.FullScreenLandscape:
                    ChangeText("FullScreenLandscape");
                    break;
                case ApplicationViewState.FullScreenPortrait:
                    ChangeText("FullScreenPortrait");
                    break;
                case ApplicationViewState.Snapped:
                    ChangeText("Snapped");
                   break;
                default:
                    break;
            }
        }

Die Funktion ChangeText setzt den aktuellen Status in unseren Textblock.


        private void ChangeText(string p)
        {
            Textblock.Text = "Ich bin im "+p+" Mod";
        }

So damit wären wir hier jetzt am Ende und unsere kleine App zeigt uns immer den Aktuellen State des ApplicationViewStates an.

Der gesamte Sourcecode dieses Artikels

hier sind alle Datein wo wir Änderungen vorgenommen haben. Weiterhin sind alle Kommentare entfernt

BlankPage.xaml


<Page
    x:Class="Application1.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Application1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
        <TextBlock x:Name="Textblock" HorizontalAlignment="Center" Margin="0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Center"/>

    </Grid>
</Page>

BlankPage.xaml.cs


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace Application1
{
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();
            Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().ViewStateChanged += new TypedEventHandler<ApplicationView, ApplicationViewStateChangedEventArgs>(this.OnViewStateChanged);
            ChangeText(Windows.UI.ViewManagement.ApplicationView.Value.ToString());
        }

        private void ChangeText(string p)
        {
            Textblock.Text = "Ich bin im "+p+" Mod";
        }

        private void OnViewStateChanged(ApplicationView sender, ApplicationViewStateChangedEventArgs args)
        {
            switch (args.ViewState)
            {
                case ApplicationViewState.Filled:
                    ChangeText("Filled");
                    break;
                case ApplicationViewState.FullScreenLandscape:
                    ChangeText("FullScreenLandscape");
                    break;
                case ApplicationViewState.FullScreenPortrait:
                    ChangeText("FullScreenPortrait");
                    break;
                case ApplicationViewState.Snapped:
                    ChangeText("Snapped");
                   break;
                default:
                    break;
            }
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            
        }
    }
}

Navigation
Tutorials und Artikel
Community Project
Werkzeuge