Zum Inhalt springen

Tile Sizes mit Windows Store Apps

Tiles im Square oder Wide Format, dann auch unterschiedliche Skalierungen, Splash Screens… Für alles sind unterschiedliche Größen der Images erforderlich.

Eine Seite mit Aufstellung aller Größen könnte helfen. Aber diese hier http://msdn.microsoft.com/en-us/library/windows/apps/Hh781198.aspx ist z.B. nicht komplett. Visual Studio hilft da sehr mit dem Package Manifest Editor. Der Editor zeigt alle Tile-Sizes die verwendet werden können. Die meisten Designer haben aber kein Visual Studio 😉
Somit meine Aufstellung hier:

Description Scale 180 Scale 140 Scale 100 Scale 80
Square 70×70 126 x 126 98 x 98 70 x 70 56 x 56
Square 150×150 270 x 270 210 x 210 150 x 150 120 x 120
Wide 310×150 558 x 270 434 x 210 310 x 150 248 x 120
Wide 310×310 558 x 558 434 x 434 310 x 310 248 x 248
Splash Screen 1116 x 540 868 x 420 620 x 300 n.a.
Square 30×30 54 x 54 42 x 42 30 x 30 24 x 24
Store Logo 90 x 90 70 x 70 50 x 50 n.a.
Badge Logo 43 x 43 33 x 33 24 x 24 n.a.

Im Windows App Store können auch promotional Images angezeigt werden. Die Größen dafür:

Description Grösse 1 Grösse 2 Grösse 3 Grösse 4
Promotional Image 846 x 468 558 x 756 414 x 468 414 x 180

Das könnte jetzt helfen.

Christian

Visual Studio 2013 und .NET 4.5.1

Dienstag, 3. Dezember gibt es die nächste .NET User Group Austria:

Visual Studio 2013 und .NET 4.5.1 sind released – da gibt es einiges Neues! Christian zeigt neue Features zu Visual Studio 2013, Windows Store Apps für Windows 8.1, One ASP.NET, und das Entity Framework 6!

 

Location: Microsoft Austria

Treffpunkt: 17:30

Start: 18:00

Anmeldung: über Facebook oder XING oder einfach ein Email schicken!

Put your hands in the air – Leap Motion Controller

Dienstag, 3.9.2013 gibt es bei der .NET User Group Austria

Leap Motion Controller in Action mit C#

mit Christoph Wille

Put Your Hands Up In The Air – Hände weg von der Maus und dem Monitor, es gilt Air Space statt Touch. Christoph zeigt den Leap Motion Controller in Aktion mit diversen Apps, und dann geht es ins SDK und die Implementierung von C# Code der auf den Controller zugreift.

Treffpunkt: 17:30
Start des Vortrags: 18:00
Nach dem Vortrag Diskussionsrunde mit Verpflegung

Location: Global Knowledge, Wien

 

Anmeldung per Email oder

https://www.facebook.com/events/144938379050496/

 

Christian

Showing Progress, Changing State

In Windows Store Apps verwende ich oft Services – bei denen es (auch unter Windows Azure) etwas dauern kann bis eine Antwort da ist. Mit der ProgressBar und dem ProgressRing kann diese Dauer für den User einfach dargestellt werden. Oft habe ich aber im User Interface nicht nur einen State für „in-progress“, sondern oft auch andere States wie „EditMode“ und „ReadMode“. Solche States einfach zu wechseln geht mit Hilfe der VisualStateManager Klasse. In diesem Blog-Artikel zeige ich ein paar Hilfsmittel dafür.

Image © Petr Balik
Dreamstime.com

Zuerst die ProgressBar. Dieses Element ist aber nicht sichtbar eingestellt. Sichtbar wird die ProgressBar erst mit einem Statewechsel.

<ProgressBar x:Name="progressBar" IsIndeterminate="True" Visibility="Collapsed" HorizontalAlignment="Stretch" />

Um den State-Wechsel vom Progress-Mode zurück nicht zu vergessen, und auch mich bei den Namen der States nicht zu vertippen habe ich mir eine Hilfsklasse geschrieben – VisualStateModeChanger. In der Page selbst definiere ich eine Enumeration der Page-States, z.B.

private enum PageMode
{
  NormalMode,
  SelectionMode,
  EditMode,
  ProgressMode,
  SelectionProgressMode
}

Im Konstruktor der Page-Klasse erzeuge ich eine Instanz vom VisualStateModeChanger der mit der Enumeration und der Page Instanz erzeugt wird:

this.pageModeChanger = new VisualStateModeChanger<PageMode>(this);

Im Event Handler kann ich jetzt einfach den State wechseln. Der VisualStateModeChanger startet hier mit dem ProgressMode und stellt nach dem Aufruf des Service-Calls mit Aufruf der Dispose Methode auf den NormalMode um:

using (this.pageModeChanger.GotoStateFromTo(PageMode.ProgressMode, PageMode.NormalMode))
{
  // make the async call to the service...
}

Ganz einfach. Jetzt brauchen wir noch noch die Implementierung vom VisualStateModeChanger. GoToState wechselt direkt in einen anderen State, GoToStateFromTo startet mit dem fromState und wechselt mit disposing in den toState.

public class VisualStateModeChanger<T>
  where T : struct
{
  private Control control;
  private T currentMode;

  public VisualStateModeChanger(Control control)
  {
    this.control = control;
  }
  public void GotoState(T newState)
  {
    VisualStateManager.GoToState(control, Enum.GetName(typeof(T), newState), useTransitions: true);
    currentMode = newState;
  }

  public IDisposable GotoStateFromTo(T fromState, T toState)
  {
    VisualStateManager.GoToState(control, Enum.GetName(typeof(T), fromState), useTransitions: true);
    return new VisualStateDisposer<T>(control, toState);
  }

  public T CurrentMode
  {
    get
    {
      return currentMode;
    }
  }

  private class VisualStateDisposer<T1> : IDisposable
    where T1 : struct
  {
    private Control control;
    private T1 endState;
    public VisualStateDisposer(Control control, T1 endState)
    {
      this.control = control;
      this.endState = endState;
    }
    public void Dispose()
    {
      VisualStateManager.GoToState(control, Enum.GetName(typeof(T1), endState), useTransitions: true);
    }
  }
}

Jetzt muß nur noch im XAML definiert werden was beim State-Wechsel passiert. In diesem Beispiel wird beim Wechsel in den ProgressMode die progressBar auf Visible umgestellt.

<VisualStateManager.VisualStateGroups>
  <VisualStateGroup x:Name="CustomStates">
    <VisualState x:Name="ProgressMode">
      <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="progressBar">
          <DiscreteObjectKeyFrame KeyTime="0">
            <DiscreteObjectKeyFrame.Value>
              <Visibility>Visible</Visibility>
            </DiscreteObjectKeyFrame.Value>
          </DiscreteObjectKeyFrame>
        </ObjectAnimationUsingKeyFrames>
      </Storyboard>
    </VisualState>

Was bei den State-Wechsel passiert, dafür kann Blend zu Hilfe genommen werden – und Animationen bei den Statewechsel definiert.

Christian

CN innovation

Weitere Infos zu Windows Store Apps in meinen Workshops und im Buch Professional C# 2012.

CSS mit der WebView Control und Windows Store Apps

Mit Windows 8.1 gibt es einen Major Update bei der WebView Control. Mit diesem Update ist sie für viele Szenarien eine praktische Variante HTML Content anzuzeigen.

In einem Projekt verwende ich die WebView Control um dynamisch HTML Code der von einem Service geliefert wird anzuzeigen, dabei aber auch noch CSS Styling direkt von der Windows Store App zu nutzen. Beides ist jetzt einfach möglich.

Die WebView Control kann einen HTML String mit der Methode NavigateToString laden:

string htmlContent = service.GetHtml();
webView1.NavigateToString(htmlContent);

Im Windows Store App Projekt gibt es ein Unterverzeichnis CSS mit der Datei Styles.css. Um diese Styles direkt vom HTML Content anzusprechen, kann die CSS Datei mit dem Prefix ms-appx-web referenziert werden. ms-appx wird von der WebView nicht unterstützt, aber ms-appx-web:

<link href="ms-appx-web:///css/Styles.css" rel="stylesheet" />

Christian

CN innovation

C++11 und C# Lambdas Teil 1

Eines der besten Features von C++11 sind Lambdas. Nach vielen Jahren keinerlei
Änderungen beim Syntax von C++ hat sich mit dem neuen Standard viel getan. In
diesem Blog Post erkläre ich die C++11 Lambdas im Vergleich zu C#.
Lancia Lambda

Einfache Lambdas

Starten wir mit einer einfachen Lambda Expression in C#:

Action l1 = () => Console.WriteLine("Hello, Lambda!");
l1();

Bei C# ist der Lambda Operator => wichtig. Links davon befinden sich die Parameter, rechts die Implementierung. Die Lambda Expression von diesem Beispiel hat keine Parameter, deshalb auch leere runde Klammern. Rechts in der Implementierung wird kein Wert zurückgeliefert. Deshalb passt beim Typ der Lambda Expression der delegate Action. Die Lambda Expression kann mit dem Syntax eines normalen Funktionsaufrufs erfolgen. Tatsächlich steckt ja auch eine Methode dahinter.

In C++11 sieht das ganze nicht so anders aus:

auto l1 = [] {
	std::cout << "hello, lambda" << std::endl;
};
l1();

Hier wird eine Lambda über [] erkannt. Nach den eckigen Klammern folgen geschwungene mit der Implementierung. Während es in C# bei Lambdas nicht möglich ist das var keyword für die Variablendeklation zu verwenden, geht das bei C++11. Das C++11 auto keyword ist ähnlich dem var in C#.

Bei C++11 kann die Lambda auch gleich direkt aufgerufen werden ohne vorher eine Variable deklarieren zu müssen:

[] {
	std::cout << "hello, lambda" << std::endl;
}();

Rückgabewerte

Soll eine Lambda einen Wert zurückliefern, muß in C# nur eine Variable deklariert werden die der Signatur und dem Rückgabewert der Lambda entspricht, und der Wert kann auch schon zurückgeliefert werden:

Func l2 = () => 42;
int x2 = l2();

Hier verwende ich eine Variable vom Typ Func für keine Argumente und einen int Return-Typ. Wenn die Lambda Expression aus einem einzigen Statement besteht ist es nicht notwendig ein return zu schreiben, und die geschwungenen Klammern können entfallen. In der langen Form sieht das dann so aus:

Func l2b = () => { return 42; };
int x2b = l2b();

Und jetzt das ganze in C++11:

auto l2 = [] {
	return 42;
};
int x2 = l2();

Deklaration des return-Typs ist hier nicht notwendig. Der Typ wird aus der Implementierung erkannt. Anders als in C# sind das return Statement und {} aber notwendig. Bei zukünftigen C++ Versionen könnte sich das aber auch noch ändern.
Bei C++11 ist die Deklaration des Return-Typs auch noch möglich:

auto l3 = []() -> int {
	return 42;
};
int x3 = l3();

Die Deklaration des Lambda-Typs kann mit dem neuen C++11 Syntax des trailing return types erfolgen. Mit diesem Syntax ist es auch notwendig die runden Klammern für die Eingabeparameter zu verwenden.

Bis auf kleine Syntax-Unterschiede sind die Lambdas bei C# und C++11 sehr ähnlich. Im zweiten Teil des Artikels geht es noch weiter mit Parameter und Captures, da finden sich dann auch [] und () im Einsatz.

Weitere Informationen zu C++11 bei meinem C++11 Workshop.

Christian
CN innovation
@christiannagel

Das Bild zeigt einen 1927 Red Lancia Lambda © Roberto Cerruti | Dreamstime.com

Tiles, Toasts, Notifications und Contracts

Morgen geht’s los mit dem Microsoft Day in der Hofburg in Wien. Rehearsal und Videoaufnahme gab es bereits letzte Woche. Rina (den Vortrag machen wir gemeinsam) hat auch schon über unseren Vortrag gepostet. Jetzt auch noch meine 2 Cents dazu.

Windows 8 Apps für Fortgeschrittene (Contracts, Notifications, Secondary Live Tiles) – der Titel sagt schon alles 🙂 Tatsächlich geht es darum Windows Store Apps für User interessanter zu machen. Nachdem die Apps meist viel kleiner sind als Desktop Apps (z.B. Vergleich mit Outlook), ist das Zusammenspiel der Apps viel wichtiger. Das lässt sich wirklich recht einfach bewerkstelligen – z.B. mit Hilfe das Sharings. Settings, Share, Search sind wichtige Themen in diesem Vortrag. Und dann soll der User noch auf den Tile klicken. Eine App kann dabei auch mehrere Tiles haben, unterschiedliche Einsprungspunkte in die App. Daten für die Tiles können über Push Notification von außen angestoßen werden. Wie das alles implementiert werden kann zeigen wir in unserer Session.

See you there!

Christian

Weitere Infos zu Windows Store Apps gibt es neben diesem Blog im Buch Professional C# 2012 und bei meinen Workshops!

 

BASTA! Spring 2013 Samples

Letzte Woche gab es von mir 4 Vorträge bei der BASTA! in Darmstadt. Wie versprochen gibt es hier die Slides und Code Samples.

Mehr Informationen zu WPF 4.5, Async mit C# und Windows Store Apps gibt es auch in meinen Workshops und im Buch Professional C# 2012 and .NET 4.5.

Viel Spaß!

Christian

© http://www.dreamstime.com/maikpeter_info

WPF 4.5 – Die Neuerungen im Überblick

Code Samples

Das wird in den WPF 4.5 Samples gezeigt:

  • Ribbon Control
  • WeakEventManager
  • Markup Extensions für Events
  • CallerMemberAttribute
  • Delay Binding
  • Live Shaping
  • Async Data Validation
  • Collections on Non-UI Threads

Async mit C# 5

Code Samples

Features der Async Samples:

  • Async Patterns
  • async & await keywords
  • Error Handling
  • Cancellation

Um das Beispiel mit den Async Patterns lauffähig zu machen musst du deine eigene Bing App-Id eintragen!

Windows Store Apps mit C#

Code Samples

Features der Async Samples:

  • .NET und Windows RT mit C# Async, HttpClient, LINQ to XML, AppBar…
  • Search
  • Share

Um das Beispiel lauffähig zu machen musst du deine eigene Bing App-Id eintragen!

Tiles, Toasts und Notifications

Code Samples

Features der Tiles, Toasts und Notifications Samples:

  • Square und Wide Tiles
  • Secondary Tiles
  • Badges
  • Tile Templates
  • Scheduled Tiles
  • Toasts
  • Windows Notification Services
  • Windows Azure Notification Hubs

Für Push Notification muss die Windows Store App mit dem Store assoziert werden, und in den Push Services die Secrets eingetragen.

Finden von Windows Store Apps über Websites

Bei den zig-tausend Windows Apps ist es oft nicht einfach die richtige App zu finden. Falls es aber eine Website gibt, kann diese mit der App verknüpft werden – und der User findet die App einfach. Voraussetzung ist dass der User IE unter Windows 8 im modernen Mode verwendet. Zwei Meta-Einträge sind alles was man dazu braucht. Dieser Artikel zeigt wie die Verknüpfung erstellt werden kann, und was es bewirkt.

Die Website http://www.kantine.at definiert bereits diesen Redirekt.IE unter Windows 8 öffnen, und von dort gibt es einen direkten Link zur Kantine App.

KantineWebsite_thumb[1]

Die AppBar vom Internet Explorer bietet Buttons zum Refresh, Pinning der Website, Tools, und ein Forward. Der Forward Button ist natürlich nur dann aktiv wenn zuvor der Back button der sich am linken Ende der AppBar befindet aufgerufen wurde. Mit den Page Tools kann zum Desktop-Browser umgeschalten werden, und eine Suche in der Page gestartet.

NotAssociated_thumb

Ist die Website mit der Windows Store App verknüpft, bekommt der Tools Button ein Plus hinzugefügt:

Associated_thumb

Falls die App noch nicht installiert ist, gibt es mit Clicken dieses Buttons ein Menü mit dem neu aktivierten Eintrag Get app for this site.

AssociatedOpen_thumb[1]

Und darauf clicken landet man direkt im Store:

Store_thumb[4]

Ist die App schon installiert, erscheint die Menüoption Switch to Kantine App, und damit wird die App gestartet.

image

Das ganze funktioniert auch bei anderen Websites mit Apps, z.B. bei http://www.bing.com.

Ermöglicht wird das alles von zwei Meta Tags innerhalb des HTML Elements head: msApplication-ID und msApplication-PackageFamily:

<meta name="msApplication-ID" content="App" />
<meta name="msApplication-PackageFamilyName" content="CNelements.Kantine_x1ms6s50zdxze" />

Die Werte für diese Elemente können aus dem Package Manifest geholt werden. msApplication-ID ist die ID der Application, auffindbar mit dem XML Editor bei Öffnen des Package Manifests der App. Das Application Element ist Kindelement von Applications, und davon wird der Wert vom Id Attribut benötigt. Typisch ist der Name App. Der Wert für msApplication-PackageFamilyName kann direkt vom Manifest Editor, Packaging Tab übernommen werden.

VStudio_thumb[1]

Summary

Mit zwei Meta Elementen wird es für Anwender einfacher die Windows Store app zu finden. Vielleicht dauert es auch eine Zeit bis User den AppBar Button finden um von dort dann zur App zu kommen. Mit der Zeit wird sich das aber legen – wenn viele Apps diese Möglichkeit nutzen. Auf jeden Fall ist der Extra Aufwand die Apps auch über diesen Weg zu finden sehr gering.

Christian

CN innovation

Weitere Informationen dazu gibt es im IE Blog: http://blogs.msdn.com/b/ie/archive/2011/10/20/connect-your-web-site-to-your-windows-8-app.aspx

Weitere Infos zu Windows Store Apps in meinen Workshops und im Buch Professional C# and .NET 4.5.

Family Safety und Kaufen im Windows Store

Es gibt ja eine ganze Menge kostenlose Games für Kinder im Windows Store. Wirklich interessante sind aber dann doch zu bezahlen. Entweder nach einem Testlauf, oder auch mit In-App Payment wo die interessanten Features erst feigeschalten werden müssen. Dabei haben sich bei mir aber ein paar Fragen und Bedingungen gestellt die ich jetzt alle positiv klären konnte:

  • Funktioniert das Einkaufen im Store mit eingeschaltetem Family Safety Mode?
    • Ja, aber anders
  • Kreditkarte möchte ich nicht im Store für die Kid-Accounts hinterlegen
    • Muß nicht sein
  • Muß ich eine App für jedes Kind kaufen?
    • Nein

image

Alle diese Fragen werden hier geklärt. Das Verwenden vom Store mit Family Safety ist vielleicht nicht ganz intuitiv. Wenn man es richtig macht (da hatte ich etwas gebraucht) funktioniert es aber bestens.

Mit Family-Safety bekommt man bestenfalls Timeouts (oder nur ewiges Warten) wenn man versucht da Apps zu kaufen. Öffnen der notwendigen Websites ist mit Family-Safety nicht erlaubt. Ich habe auch nicht versucht diese Weblinks herauszufinden um sie bei Family Safety zu erlauben.

Der richtige Weg:

Parent Account

Zuerst mal einen Parent-Account anlegen und mit diesem in die PCs der Kinder einloggen. Ich habe dafür einen weiteren Account angelegt und verwende nicht meinen Hauptaccount – aufgrund dieser Eigenschaften:

  • Ein Account kann nur auf 5 PCs Apps vom Store installieren – mit den PCs der Kinder wird dieses Limit überschritten
  • In meinem Hauptaccount möchte ich nicht die ganzen Spiele unter meinen Apps finden. Im Store gibt es das Feature dass ich alle meine Apps mit wenig clicks installieren kann (z.B. auf einem neu installierten PC), da sollen die Spiele aber nicht dabei sein

Kaufen im Store vom Parent Account

Beim Parent Account habe ich auch kein Problem die Kreditkarte im Store zu hinterlegen. Jetzt kann ich Games direkt in diesem Account auf den Kids-PCs installieren. Auch In-App Payment mit Starten der App läuft über diesen Account.

Installieren der Apps im Kinder-Account

Der nächste Schritt ist es die App nochmal vom Kinder-Account zu installieren. Eine bezahlte App kann auf bis zu 5 PCs installiert werden, auch von anderen Accounts. Dieser extra Prozeß kann vereinfacht werden, die Apps sollen vielleicht auch für mehrere Kinder zur Verfügung gestellt werden.

Eingeloggt im Kids-Account ist es im Store möglich den Account zu wechseln: Charms Bar, Settings, Your Account. Eingeloggt im Kids-Account kann ich im Store zum Parent Account wechseln. Danach Auswahl von “Your Apps” in der App-bar, und die gekauften Apps können einfach gefunden und nochmal installiert werden.

Summary

Der einfachste Weg mit Family Safety bezahlte Apps für Kinder installieren: am besten einen eigenen Microsoft Account für die Kinder-Apps einrichten und die Apps über diesen Account vom Store beziehen. Im Kinder-Account den Account im Store auf den Parent umstellen, und die App dann nochmal installieren. Damit ist es möglich Apps auf bis zu 5 PCs zu installieren, d.h. bei bis zu 5 Kinder ist das kein Problem. Und dieses Windows-Limit habe ich nicht vor zu erreichen Winking smile

Christian

CN innovation