Montag, 27. September 2010

Windows Phone 7 - Emulator Hard - Reset

Um den Emulator zurück zu setzen (Reset) und damit auch die Uhrzeit neu zu stellen ist es möglich die Statusdateien (Statefiles) zu löschen. Diese Dateien "*.dess" findet man unter dem verstecktem Verzeichniss "%ProgramData%\Microsoft\XDE\" also zum Beispiel: "C:\ProgramData\Microsoft\XDE\{E4ABD6D1-E17F-2AD4-B088-2351B2181DC6}.dess"

Sonntag, 12. September 2010

Wie verwende ich Resourcen für die Lokalisierung (Localisation) in Windows Phone 7 Seiten (Page) und Controls?

Resourcen für Lokalisierung in einer Windows Phone 7 Seite (Page - xaml)

1. In Visual Studio fügen Sie eine neue Datei vom Typ "Resource" hinzu, diese benennen Sie je nach Verwendung. In unserem Beispiel bleibt der vorgegebene Name "Resource1.resx". Zu dieser Resource wird automatisch eine Code-Behind-Datei erstellt. Daran erkennt man auch die Default-Resource, bei den anderen Sprachen wird keine Code-Behind-Datei erstellt bzw. benötigt.
 
2. In VS 2010 unter den Eigenschaften des Projekts bei "Application" - "Assembly Informationen" muß nun die Default-Sprache "Neutral Language" auf z.b. English (United States) besser noch nur "English" eingestellt werden. Besser da, da nur "English" noch neutraler ist.
 
 
 
3. Fügen Sie folgende Klasse "LocalizedStrings.cs" zu Ihrem Projekt hinzu:
 
 
 
Die Bezeichnungen müssen entsprechend dem Resource-Klassen-Namen angepasst werden. In diesem Fall heißt die Resource "Resource1" (siehe 4.).

4. In der Resource-Datei werden nun die Texte als Strings erfasst (Beispiel "Greetings"), desweiteren wird der "Access Modifier" auf Public gesetzt:

Name - der Resource, Zugriffsbezeichner.
Value - der Wert der Resource, in diesem Fall der Text der angezeigt werden soll.
Comment - ein optionaler Kommentar

Hinweis: Es können auch andere Resourcen wie Images, Icons, Audio, Files und Others hinzugefügt werden.

5. Auf der Windows Phone 7 Seite wird ein Verweis auf die zu verwendete Resource hinzugefügt - siehe Zeile 16-18 im Bild unter Punkt 6.

6. Nun wird z.b. ein TextBlock ("textBlock1") - siehe Zeile 35-38 im Bild - hinzugefügt.


7. Die Eigenschaft "Text" des TextBlocks wurde auf die Resource "{Binding Path=LocalizedResources.Greetings, Source={StaticResource LocalizedStringTest}}" gebunden.

Damit ist nun die Resource für die Standard-Sprache festgelegt.

8. Für andere Sprachen kann nun die "Resource1.resx" kopiert werden und je nach Sprache z.b. in "Resource.de-DE.resx" (besser "Resource.de.resx") umbenannt werden.

Die derzeit unterstützte Sprachen sind:
  • Englisch:
    en English, en-US English (United States), en-GB English (United Kingdom), en-AU English (Australia), en-CA English (Canada), en-NZ English (New Zealand), en-IE English (Ireland), en-ZA English (South Africa), en-JM English (Jamaica), en English (Caribbean), en-BZ English (Belize)
  • Deutsch:
    de German (Standard), de-CH German (Switzerland), de-AT German (Austria), de-LU German (Luxembourg), de-LI German (Liechtenstein)
  • Italienisch:
    it Italian (Standard), it-CH Italian (Switzerland)
  • Spanisch:
    es Spanish (Spain), es-MX Spanish (Mexico), es-GT Spanish (Guatemala), es-CR Spanish (Costa Rica), es-PA Spanish (Panama), es-DO Spanish (Dominican Republic), es-VE Spanish (Venezuela), es-CO Spanish (Colombia), es-PE Spanish (Peru), es-AR Spanish (Argentina), es-EC Spanish (Ecuador), es-CL Spanish (Chile), es-UY Spanish (Uruguay), es-PY Spanish (Paraguay), es-BO Spanish (Bolivia), es-SV Spanish (El Salvador), es-HN Spanish (Honduras), es-NI Spanish (Nicaragua), es-PR Spanish (Puerto Rico)
  • Französisch:
    fr French (Standard), fr-BE French (Belgium), fr-CA French (Canada), fr-CH French (Switzerland), fr-LU French (Luxembourg)
Die unterstützten Sprachen müssen im Projektfile (*.csproj) nun noch definiert werden, dies erfolgt mit folgendem XML-Tag. Die Standard-Sprache wird nicht aufgeführt:

Beispiel - Standardsprache: en-US
<supportedcultures>de-DE;es-ES;fr-FR;it-IT</supportedcultures>

Noch besser, da neutraler - ohne Gebiet:
<supportedcultures>de;es;fr;it</supportedcultures>

Einen Trick das Projekt-File zu edititeren finden Sie unter: Trick um ein Projekt-File zu bearbeiten

9. Nun folgt die Anpassung der Sprache, dabei darf nur der Wert/Value und der Kommentar/Comment verändert werden.
Hinweis: Der Name ist der Identifier und darf nicht verändert werden.

  
Während die App auf dem Windows Phone 7 läuft wird nun automatisch (Spracheinstellung des Telefons) die Sprachresource gewählt und die Texte, Bilder und andere Resourcen entspechend angezeigt.

Übersicht der Resourcenanbindung auf einer Windows Phone 7 Seite (Page)



Resourcen für Lokalisierung in einem Windows Phone 7 Control (Windows Phone Control - xaml)

Die Resourcenanbindung auf einem Control erfolgt ähnlich zur Page. Unterschiedlich ist nur der Verweis auf die Resource. Statt auf eine "phone:PhoneApplicationPage.Resources" wird auf eine "UserControl.Resources" verwiesen.

Übersicht der Resourcenanbindung auf einem Windows Phone 7 Control


Samstag, 11. September 2010

Wie kann man die Benutzereingaben in einer Webseite sperren?

Problem:
Es soll eine Internetseite im Webbrowser (Internet Explorer) angezeigt werden, die gesperrt ist. Also der Benutzer keine Eingaben machen kann.

Lösung:
In dem die Eigenschaft "IsHitTestVisible" des WebControls auf False gesetzt wird.

Freitag, 10. September 2010

2D / 3D Physic-Engines für Windows Phone 7

Unterstützte Media Codecs des Windows Phone 7

Windows Phone 7 Codecs

Wie lese ich ein Textfile aus den Resourcen?

Using System.IO;
using System.Windows.Resources;

string txt;
Uri uri = new Uri("TextFile.txt", UriKind.RelativeOrAbsolute);
Stream ResourceInfo sri = App.GetResourceStream(uri);
StremReader sr = new StreamReader(sri.Stream);
txt = sr.ReadToEnd();
sr.Close();

Wie speichere ich Applikations Daten / Einstellungen

Für eine große Menge an Daten sollten diese in einer XML-Datei im Isolated Storage gespeichert werden. Für Applikations-Einstellungen oder sehr kleinen Datenmengen gibt es noch eine zweite Möglichkeit:

using System.IO.IsolatedStorage;


// Einstellung lesen
if (IsolatedStorageSettings.ApplicationSettings.Contains(name))

   ret = IsolatedStorageSettings.ApplicationSettings["Einstellung1"].ToString();
else
   ret = string.Empty;
 
// Einstellung schreiben
if (IsolatedStorageSettings.ApplicationSettings.Contains("Einstellung1"))

   IsolatedStorageSettings.ApplicationSettings["Einstellung1"] = value;
else
   IsolatedStorageSettings.ApplicationSettings.Add("Einstellung1", value);

Wie kann ich Daten an eine andere Seite weitergeben?

Problem:
Es sollen viele Daten an eine andere Seite weitergegeben werden. Die Querystring-Option ist zu umständlich!

Lösung:
NavigationService.Navigate(new Uri("/DetailsPage.xaml", UriKind.Relative));
FrameworkElement root = Application.Current.RootVisual as FrameworkElement;
root.DataContext = _selectedItem;

Wie sortiere ich die Daten einer MVVM List-Applikation?

Problem:
Das verwendete Objekt "ObservableCollection" bietet keine Möglichkeit MVVM-konform die Daten zu sortieren.

Lösung:
Die Daten in ein Property "Source" eines Objektes des Typs "CollectionViewSource" stecken, dieses bietet dann die Möglichkeit zu sortieren, gruppieren und filtern.

Tastatur funktioniert nicht mehr im Emulator

Problem:
Keyboard.GetState() liefert kein Ergebnis.

Lösung:
Die virtuelle Tastatur mit Pause oder Page Up/Down wieder einschalten.

Leerzeichen im VS 2010 Projektname

Problem:

Falls im Projektnamen Leerzeichen vorkommen z.b. "Meine App" ersetzt VS z.b. bei <img source="/Meine_App;component/Images/bild1.jpg" x:name="bild1" /> das Leerzeichen in einen Unterstrich.

Lösung:

Den Unterstrich "per Hand" mit einem Leerzeichen ersetzen. Beispiel: <img source="/Meine App;component/Images/bild1.jpg" x:name="bild1" />

Location Service während das Phone gesperrt ist

Während das Phone 7 - Telefon gesperrt ist stehen keine Services zur Verfügung. Die Anwendung wird gestoppt oder sogar beendet.