o-LIVE-r

Windows, Windows Phone, Silverlight, Internet Explorer, and the Cloud

  • o-LIVE-r

    Windows Phone 7: Die Application Bar

    • 1 Comments

    Die Application Bar ist im Prinzip das Menü einer Windows Phone Anwendung.

    image

    In die Application Bar lassen sich bis zu vier Symbole (ApplicationBarIconButton) integrieren, denen bestimmte Funktionen zugeordnet werden können. Zusätzlich ist es möglich noch ein erweitertes Menü zu integrieren (im Bild an den kleinen Punkten rechts, neben den vier Symbolen). Drückt man darauf, bekommt man ein Textmenü eingeblendet.

    image

    Damit hat man die Möglichkeit mehr Funktionen als über vier Symbole möglich wären, einzubauen.

    Die Application Bar-Funktionalität ist nur verfügbar, wenn man als Enwickler die Bibliothek “Microsoft.Phone.Shell” integriert, ansonsten sucht man nach der ApplicationBar vergeblich.

    Der Code für das Anlegen der Application Bar:

    ApplicationBar = new ApplicationBar();
    ApplicationBar.IsMenuEnabled = true;
    ApplicationBar.IsVisible = true;
    ApplicationBar.Opacity = 1.0;

    Der Code für das Erzeugen der Symbole:

    ApplicationBarIconButton add = 
        new ApplicationBarIconButton(
            new Uri("/Images/appbar.add.rest.png", UriKind.Relative));
    add.Click += (s, e) =>
        {
            MessageBox.Show("Add-Clicked", "Info", MessageBoxButton.OK);
        };
    ApplicationBar.Buttons.Add(add);
                
    ApplicationBarIconButton remove = 
        new ApplicationBarIconButton(
            new Uri("/Images/appbar.delete.rest.png", UriKind.Relative));
    ApplicationBar.Buttons.Add(remove);
                
    ApplicationBarIconButton edit = 
        new ApplicationBarIconButton(
            new Uri("/Images/appbar.edit.rest.png", UriKind.Relative));
    ApplicationBar.Buttons.Add(edit);
                
    ApplicationBarIconButton question = 
        new ApplicationBarIconButton(
            new Uri("/Images/appbar.questionmark.rest.png", UriKind.Relative));
    ApplicationBar.Buttons.Add(question);

    Der Code für die Menüeinträge:

    ApplicationBarMenuItem setUserSettings = 
        new ApplicationBarMenuItem("set usersettings");
    ApplicationBar.MenuItems.Add(setUserSettings);
                
    ApplicationBarMenuItem changeColor = 
        new ApplicationBarMenuItem("change color");
    ApplicationBar.MenuItems.Add(changeColor);
    
    ApplicationBarMenuItem orderCoffee =
        new ApplicationBarMenuItem("order coffee");
    ApplicationBar.MenuItems.Add(orderCoffee);

    Um nun die Application Bar dynamisch aus der Anwendung heraus aufzurufen gibt es verschiedene Möglichkeiten.

    // Einfaches einblenden
    ApplicationBar.Opacity = 1.0;
    ApplicationBar.IsMenuEnabled = true;
    ApplicationBar.IsVisible = true;

    // Ausblenden

    ApplicationBar.IsVisible = false;

    // Transparentes Darstellen

    ApplicationBar.Opacity = .5;
    ApplicationBar.IsMenuEnabled = true;
    ApplicationBar.IsVisible = true;

    // Darstellen ohne Menü

    ApplicationBar.Opacity = 1.0;
    ApplicationBar.IsVisible = true;    
    ApplicationBar.IsMenuEnabled = false;
  • o-LIVE-r

    Windows Phone 7: Bildschirm-Orientierung

    • 0 Comments

    Windows Phone 7 unterstützt generell zwei Ausrichtungen des Bildschirms: Portrait (hochkant) und Landscape (also um 90° gedreht ;) ).

    Beim Anlegen einer neuen Seite für Windows Phone muss man sich zu Beginn leider für eine Ausrichtung entscheiden. Diese Entscheidung lässt sich aber in nur wenigen Sekunden korrigieren bzw. dynamisch ändern.

    Das folgende Beispiel zeigt, wie leicht man die gewünschte Ausrichtung auf seinem Bildschirm einstellen kenn.

    image

    private void _onlyPortrait_Checked(object sender, System.Windows.RoutedEventArgs e)
            {
                SupportedOrientations = SupportedPageOrientation.Portrait;
            }

     

    image

     

    Okay … der Windows Phone Emulator dreht sich leider nicht automatisch um, aber manuell mittels Button auf der rechten Seite geht es dann schon ;-)

    image

    image

    Der Code dazu:

    private void _onlyLandscape_Checked(object sender, System.Windows.RoutedEventArgs e)
            {
                SupportedOrientations = SupportedPageOrientation.Landscape;
            }

     

    Und jetzt beides auf einmal bitte:

    private void _portraitAndLandscape_Checked(object sender, System.Windows.RoutedEventArgs e)
            {
                SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;
            }

     

    Das ist doch einfach, oder?

  • o-LIVE-r

    Windows Phone 7 und das Einbinden von Webservices

    • 0 Comments

    Die Werkzeuge für Windows Phone 7 sind zwar schon sehr gut, aber einfach noch nicht ganz fertig. Das merkt man unter Visual Studio 2010 (RTM) besonders dann, wenn man mal eben einen Webservice in seine Windows Phone 7 Anwendung integrieren möchte.

    Dort fehlt nämlich einfach dieser Menüpunkt:

    image

    Aber nicht verzagen … Visual Studio 2010 Express For Windows Phone fragen:

    image

    Da geht es nämlich schon … muss man nur wissen :-)

  • o-LIVE-r

    TechEd Europe 2010- Anmeldeseite LIVE!

    • 0 Comments

    clip_image002

    Bereits seit 17 Jahren findet inzwischen die Tech∙Ed Europe, die größte europäische Konferenz von Microsoft für IT-Pros und Entwickler, statt.

    Wir freuen uns, dass wir auch in diesem Jahr Gastgeberland sind und erneut tausende von IT Begeisterten in Berlin begrüßen dürfen. Vom 8. bis 12. November  2010 stellt Microsoft im Convention Center der Messe Berlin technische Neuerungen im Detail vor und gibt einen Ausblick auf zukünftige Technologien. 

    Die Anmeldung ist seit Mittwoch, 19.05.2010  auf der offiziellen Homepage möglich.

    Alle aktuellen Informationen zur Tech∙Ed gibt es auch über Twitter (http://twitter.com/teched_europe/).

  • o-LIVE-r

    360° Panorama mit Silverlight und Photosynth

    • 0 Comments

    Photosynth ist ein sehr einfaches Werkzeug um Fotos in einem Dreidimensionalen Raum anordnen zu lassen. Es ist sehr einfach zu bedienen und macht dabei unglaublich viel Spaß.

    Man muss lediglich Bilder in Photosynth hineinladen und der Rest geschieht von selbst. Photosynth erkennt Ecken, Kanten und diverses mehr und setzt die Bilder in einem 3D-Raum neu zusammen.

    image

    Link: www.photosynth.net

  • o-LIVE-r

    Zusammenarbeit mit der HTML5-Gemeinde

    • 0 Comments

    Wir sind immer sehr daran interessiert mit den Mitgliedern des W3C zusammenarbeiten zu können. Dazu gehört dann auch der Austausch mit den Entwicklern von anderen Browserherstellern, sowie einer sehr breiten Webentwickler-Community, wenn es darum geht die aktuelle und aufkommende Webstandards zu “formen”, wie z.B. gerade HTML5 oder die Mitarbeit in der Arbeitsgruppe rund um SVG.

    In diesem Beitrag möchte ich einige Ansprechpartner und Informationen zu den verschiedenen Aktivitäten von Microsoft liefern, damit sich jeder gerne direkt an die entsprechenden Beteiligten wenden kann.

    Feedback für HTML5
    Tony Ross ist ein Internet Explorer Program Manager und Jonas Sicking das Pendant bei Mozilla. Beide führen seid geraumer Zeit eine Diskussion über die Erweiterbarkeit innerhalb von HTML5 (Link: hier). Derzeit ist diese Herausforderung noch nicht gelöst, allerdings gibt es inzwischen einige interessante Vorschläge, die dem Komitee basierend auf dem Austausch vorgelegt wurden. 

    Testen von HTML5
    Kris Krueger ist Internet Explorer Test Lead und Moderator der W3C HTML5 Testing Task Force.  Diese Task Force hat die notwendige Infrastruktur aufgebaut (Wiki, Bugzilla, ein Work Item Tracker und ein CVS Repository für Testfälle). Damit beginnend, haben sie sich drangemacht die DOM Level 2 HTML Testfälle als Basis für die HTML5 Tests zu verwenden. Genau so wie bei CSS2.1, denken wir, das eine gute Testsuite ein kritischer Faktor für die Spezifikation der interoperablen Standards wird.

    Sicherstellen das neue Spezifikationen die Barrierefreiheit verbessern
    Wir sind sehr an der Verbesserung der Barrierefreiheit interessiert, besonders im Internet. Deshalb implementieren wir diverse Barrierefreiheit-fokusierte Browser-Features, darüberhinaus arbeiten wir mit Apple, IBM und anderen interessierten Parteien daran, das die neuen HTML5 Elemente <canvas> und <video> eine gute Barrierefreiheit beinhalten, so das entsprechende Websites diese auch voll und ganz verwenden können. Diese Arbeit wird von der Accessibility Task Force geleitet.  Zusammen arbeiten wir an <canvas> HTML Prototypen als ‘proof of concepts’ um sicherzustellen das diese Features auch gut “spezifiziert” und implementiert werden können (Teleconference

    Indexed DB Proposal
    Zusammen mit Mozilla arbeiten wir an einem neuen Design für lokale Datenspeichern, die als sogenannte Indexed DB bezeichnet werden. Wir denken, das dies eine großartige Lösung für das Web wird. Der “Working Draft” dazu kann hier genau betrachtet werden (Link).

    DOM Level 3 Events
    Travis Leithead ist Internet Explorer Program Manager. Er arbeitet derzeit an der Behebung noch offener Probleme im aktuellen Draft. Es ist schon eine Weile her seit dem die Arbeitsgruppe ihren letzten Stand veröffentlich hat. (Link: working draft).

    Abschließend ist dieses Interview mit Paul Cotton (Microsoft Mitarbeiter und Co-Chair der W3C HTML Working Group) sehr lesenswert (Link: Interview with Paul Cotton).

  • o-LIVE-r

    Expression Blend 4 for Windows Phone in 90 Seconds

    • 0 Comments

    Jon Harris zeigt was man in 90 Sekunden mit Expression Blend 4 for Windows Phone so alles zaubern kann.

    image

    Link

  • o-LIVE-r

    Expression Blend 4 erweitern mit dem Extensibility Framework

    • 0 Comments

    Dank MEF (Microsoft Extensibility Framework) ist es möglich eigene Anwendungen modularisieren zu können, bzw. mittels Add-In-Technik, mal mit mehr mal mit weniger Features zu versehen.

    Auch Expression Blend verwendet diesen “Trick” und erlaubt es so, eigene Erweiterungen für Expression Blend zu schreiben. Einen guten Überblick findet dazu man hier.

  • o-LIVE-r

    Visual Studio 2010 Skinnen wie Expression Blend

    • 0 Comments

    Wer es gerne dunkel mag, für den gibt es ein Skin für Visual Studio 2010, die aus de dem Visual Studio Lila ein “dunkles” Werkzeug der Macht macht :)

    Link: http://gallery.expression.microsoft.com/en-us/VS2010Expression

  • o-LIVE-r

    Xtopia [kompakt] 2010 – Die Videos sind online

    • 0 Comments

    In den letzten zwei Wochen waren wir mit der Xtopia [kompakt] in sechs Städten unterwegs und haben über neue Web- und Design-Technologien gesprochen. Die Veranstaltung in Hamburg haben wir auf Video festgehalten. Diese Videos sind nun fertig nach bearbeitet und stehen Live hier zum ansehen bereit.

    Viel Spaß,
    The-Oliver

  • o-LIVE-r

    Windows Phone 7 Tools Refresh!

    • 0 Comments

    Aus dem Windows Phone Blog:

    WPDTCTPR“Die seit der MIX verfügbaren Vorabversionen der Windows Phone 7 Developer Tools (VS 2010 Express for Windows Phone, Expression Blend 4, XNA Game Studio 4.0, diverse Plug-Ins) sind ab sofort in einer Refresh-Version verfügbar! Besonders wichtig zu erwähnen ist, dass diese nun kompatibel mit der finalen Version von VS 2010 und dem .NET Framework 4 sind.

    Im einzelnen sind neu und hier verfügbar:

    .NETFx 4 RTM
    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7

    Windows Phone Developer Tools CTP - April Refresh
    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=cabcd5ed-7dfc-4731-9d7e-3220603cad14

    Microsoft Expression Blend® 4 Release Candidate (RC)
    http://www.microsoft.com/downloads/details.aspx?FamilyID=88484825-1b3c-4e8c-8b14-b05d025e1541&displaylang=en

    Microsoft® Expression Blend® Add-in Preview 2 for Windows® Phone
    http://www.microsoft.com/downloads/details.aspx?FamilyID=47f5c718-9dec-4557-9687-619c0fdd3d4f&displaylang=en

    Microsoft® Expression Blend® Software Development Kit (SDK) Preview 2 for Windows Phone
    http://www.microsoft.com/downloads/details.aspx?FamilyID=86370108-4c14-42ee-8855-226e5dd9b85b&displaylang=en

    Vor der Installation bitte die Vorgängerversionen der o.g. Tools komplett de-installieren. Eine Installation der Refresh-Versionen in der o.g. Reihenfolge hat bei mir funktioniert.

    Zu den Neuerungen (neben der VS2010 RTM-Kompatibilität) s. die aufgefrischte Dokumentation und diesen Eintrag im WP Developer Blog.

    Happy coding, happy designing! :-)“

  • o-LIVE-r

    Silverlight Smooth Streaming in 3D

    • 0 Comments

    image Gut das ich meine 3D-Brille aus “Avatar” nicht direkt weggeschmissen habe. Auf der NABShow (Broadcasting-Messe) wurde Mitte April nämlich die Möglichkeit des Live-Streamens von Content in 3D demonstriert.

    Dazu dient der Radio Sender “Antenne Niedersachsen” als “Versuchskaninchen”, denn dieser streamt mittels zwei Kameras ein 3D-Bild übers Web … Live …

    Der Link: hier.

  • o-LIVE-r

    Silverlight: Chrome und Glass Theme

    • 0 Comments

    Auf Silverlight Scratchpad ist ein sehr gutes Tutorial zum Thema Theming in Silverlight 4 veröffentlicht worden. Kleiner Nebeneffekt, es wird direkt ein sehr schönes Theme im Chrome Glass Look bereitgestellt.

    image

    Link

  • o-LIVE-r

    Übersicht der Unterschiede zwischen Silverlight auf Windows/Mac und Windows Phone

    • 0 Comments

    Auf MSDN wurde jetzt ein sehr guter Artikel veröffentlich der die genauen Unterschiede zwischen Silverlight auf Windows/Mac und auf Windows Phone 7 beschreibt.

    Differences Between Silverlight on Windows and Windows Phone

    Features Supported in Silverlight for Windows Phone

  • o-LIVE-r

    Zurück in die Zukunft mit Silverlight 4 – Roadshow von Gregor Biswanger

    • 0 Comments

    Gregor Biswanger ist derzeit sehr kräftig im Lande unterwegs um über die Highlights von Silverlight 4 zu sprechen.

    • .NET User Group Frankfurt 04.05.2010
    • .NET User Group Saar  05.07.2010
    • .NET User Group Braunschweig 20.07.2010
    • .NET User Group Hamburg 18.08.2010

    Weitere Termine folgen.

    Mehr Informationen dazu gibt es hier und in seinem Blog.

  • o-LIVE-r

    Flash Converter für Windows Phone 7

    • 0 Comments

    image

    Wie toll wäre es, wenn man als Flash-Entwickler seine Spiele auch auf ein Telefon bringen könnte. Leider ist dies für viele nur ein Traum. Nicht so für diejenigen, die für das neue Windows Phone 7 entwickeln möchten.

    SWFLight portiert Flash-Spiele auf Windows Phone 7 und damit auch direkt nach Silverlight.

    Wie cool!

    Link

  • o-LIVE-r

    Silverlight 4: Copy and Paste and Cut

    • 0 Comments

    In Silverlight 4 hat man nun Zugriff auf die Zwischenablage. Im Zuge der Vorbereitung für einen neuen Webcast, habe ich mir das ganze mal angesehen und war positiv überrascht, wie einfach das ist.

    Der folgende Code zeigt wie die typischen Copy, Paste und Cut (Kopieren, Einfügen und Ausschneiden) – Befehle für Textboxen implementiert werden können.

     

    private void CopyToClipboard()
    {
        if (_source.SelectedText.Length > 0)
        {
            Clipboard.SetText(_source.SelectedText);
        }
        else
        {
            Clipboard.SetText(_source.Text);
        }
    }
    
    private void CutText()
    {
        CopyToClipboard();
    
        if (_source.SelectedText.Length > 0)
        {
            _source.Text = _source.Text.Remove(_source.SelectionStart, _source.SelectionLength);
        }
        else
        {
            _source.Text = string.Empty;
        }
    }
    
    private void PasteText()
    {
        if (Clipboard.ContainsText())
        {
            string pasteText = Clipboard.GetText();
            if (_target.SelectedText.Length > 0)
            {
                int insertPosition = _target.SelectionStart;
                string text2change = _target.Text;
                text2change = text2change.Remove(insertPosition, _target.SelectionLength);
                text2change = text2change.Insert(insertPosition, pasteText);
                _target.Text = text2change;
                _target.Select(insertPosition, pasteText.Length);
            }
            else
            {
                _target.Text = pasteText;
            }
        }
    }
  • o-LIVE-r

    Silverlight 4: Die rechte Maustaste und das Kontextmenü

    • 0 Comments

    Im WWW-Standard gibt es ja eigentlich gar keine rechte Maustaste. Es soll ja auch tatsächlich noch Menschen geben, die mit Mäusen auskommen die nur eine Taste haben.

    Allerdings gibt es ja Tricks, die es dennoch erlauben.

    In Silverlight 4 ist die Unterstützung der rechten Maustaste jetzt voll und ganz integriert. Man kann überall, außer dem Root-Element der Silverlight-Anwendung die rechte Maustaste abfangen.

    void _rectangle_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
        MessageBox.Show("Right Mouse Button Clicked");
    }

    Man muss lediglich im Eventhandler für das Ereignis “MouseRightButtonDown”, die “Handled”-Eigenschaft auf “true” setzen. Anschließend kann man an dieser Position nun ein eigenes Kontextmenü integrieren.

    Für die Darstellung von Kontextmenüs kann jedes beliebige Steuerelement entwickeln. In meinem Fall, erstelle ich einfach ein StackPanel an Textblöcken, die angeklickt werden können. Um allerdings dieses Kontextmenü darzustellen, benötigt man ein Popup-Steuerelement. Dieses bekommt als Inhalt, das eigentliche Steuerelement.

    Popup _popup;
    
    void _rectangle_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
                
        MessageBox.Show("Right Mouse Button Clicked");
    }
    
    void MainPage_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        ClosePopup();
    }
    
    void MainPage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        ClosePopup();
    }
    
    void _source_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
    
        Point position = e.GetPosition(null);
        ShowContextMenu(position);
    }
    
    private void ClosePopup()
    {
        if (_popup != null)
        {
            _popup.IsOpen = false;
            _popup = null;
        }
    }
    
    private void ShowContextMenu(Point position)
    {
        if (_popup != null)
        {
            _popup.IsOpen = false;
            _popup = null;
        }
    
        StackPanel sp = new StackPanel();
        sp.Background = new SolidColorBrush(Colors.LightGray);
                
        sp.Children.Add(
            CreateMenuItem(
                "Kopieren", () => { ClosePopup(); CopyToClipboard(); }));
    
        sp.Children.Add(
            CreateMenuItem(
            "Ausschneiden", () => { ClosePopup(); CutText(); }));
    
        sp.Children.Add(
            CreateMenuItem(
            "Einfügen", () => { ClosePopup(); PasteText(); }));
    
        _popup = new Popup();
        _popup.Child = sp;
        _popup.Margin = new Thickness(position.X, position.Y, 0, 0);
        _popup.IsOpen = true;
    }
    
    delegate void MyDelegate();
    
    private FrameworkElement CreateMenuItem(string caption, MyDelegate func)
    {
        TextBlock tb = new TextBlock();
        tb.Text = caption;
        tb.MouseLeftButtonDown += (s, e) =>
            {
                func.Invoke();
            };
        return tb;
    }

  • o-LIVE-r

    Silverlight 4: How to integrate Microsoft Translator Service into Silverlight and Windows Phone

    • 0 Comments

    A few weeks ago, I found the Microsoft Translator Interactive SDK, and I recognized that it is very easy to use in .NET applications, like Silverlight and Windows Phone.

    So I started a sample application. After a while I got the idea to build a “UserControl” out of this feature. Why? Because it is “pickable” in the UI for a developer or Designer. The control itself is not visible at runtime, it only appears at designtime, as an ugly looking red box with its name on it.

    You can see the App here in action.

    Sample of the control in Silverlight 4 App

    image

    Sample of the control in Windows Phone 7 Application

     image

    Why it is so interesting for me? Because you can reuse it very easy, without knowledge of the internas. It has just a few properties for configuration and one Load-Method.

    It just has one important property you have to set, the Application Id of Microsoft Translator. You can get one here (http://developer.live.com).

    image

    The control has two events.

    image

    To translate text from one language (de-de = Germany) into one other (en-us = English US) is extremly simple. Problems like synchronizing the background thread into the UI-Thread is hidden in the control.

    The following code demonstrates the easiness of using.

    private void MicrosoftTranslator_Translated(object sender, TheOliver.Controls.TranslatorEventArgs args)
    {
        _out.Text =args.TranslatedText;
    }
    
    private void MicrosoftTranslator_TranslationError(object sender, TheOliver.Controls.TranslatorErrorEventArgs args)
    {
        _out.Text= args.Error.Message;
    }
    
    private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        _mts.Translate(_in.Text, "de-de", "en-us");
    }

    Here is the complete code of the Microsoft Translator Service:

    // Copyright © Microsoft Corporation.  All Rights Reserved.
    // This code released under the terms of the 
    // Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)
    
    using System;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;
    
    namespace TheOliver.Controls
    {
        public class MicrosoftTranslator : UserControl, INotifyPropertyChanged
        {
            private string _appId;
            public string AppId
            {
                get { return _appId; }
                set { _appId = value; }
            }
    
            private bool _isBusy = false;
            public bool IsBusy
            {
                get { return _isBusy; }
                set
                {
                    _isBusy = value;
                    OnPropertyChanged("IsBusy");
                    this.IsIdle = !_isBusy;
                }
            }
    
            private bool _isIdle = true;
            public bool IsIdle
            {
                get { return _isIdle; }
                set
                {
                    _isIdle = value;
                    OnPropertyChanged("IsIdle");
                }
            }
    
            private byte[] _bytes;
    
            public MicrosoftTranslator()
            {
                if (DesignerProperties.GetIsInDesignMode(this))
                {
                    StackPanel sp = new StackPanel();
                    sp.Background = new SolidColorBrush(Colors.Red);
    
                    TextBlock tb = new TextBlock();
                    tb.Text = "[Microsoft Translator Service]";
    
                    sp.Children.Add(tb);
                    this.Content = sp;
                }
            }
    
            public void Translate(string sourceText, string sourceLanguage, string targetLanguage)
            {
                if (this.AppId == string.Empty || this.AppId == null)
                {
                    MessageBox.Show("No AppId for Translator service defined. You can get an AppId at http://dev.live.com.");
                    return;
                }
    
                this.IsBusy = true;
    
                // Creating a string with the request URL
                // The URL includes the Bing developer appId and in this case hardcoded to translate from 
                // English to Spanish
                string translateUri =
                    "http://api.microsofttranslator.com/V1/Http.svc/Translate?appId=" + _appId
                    + "&from=" + sourceLanguage
                    + "&to=" + targetLanguage;
    
                // Create a web request to the URL
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(translateUri);
    
                // Set the request method to POST
                httpWebRequest.Method = "POST";
    
                // Set the content type (needs to be text/plain for POST methods)
                httpWebRequest.ContentType = "text/plain";
    
                // Encode the txtInput value bytes for the POST
                _bytes = Encoding.UTF8.GetBytes(sourceText);
    
                // Create a stream for the request
                httpWebRequest.BeginGetRequestStream(new AsyncCallback(OnGetRequestStream), httpWebRequest);
            }
    
            private void OnGetRequestStream(IAsyncResult iar)
            {
                try
                {
                    HttpWebRequest httpWebRequest = (HttpWebRequest)iar.AsyncState;
                    Stream os = httpWebRequest.EndGetRequestStream(iar);
    
                    os.Write(_bytes, 0, _bytes.Length);
    
                    if (os != null)
                    {
                        // Close the stream when finished
                        os.Close();
                    }
    
                    // Send the request and get the response
                    httpWebRequest.BeginGetResponse(new AsyncCallback(OnGetResponse), httpWebRequest);
                }
                catch (Exception exc)
                {
                    RaiseError(exc);
                }
            }
    
            private void OnGetResponse(IAsyncResult iar)
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)iar.AsyncState;
    
                    if (!iar.IsCompleted)
                    {
                        Debug.WriteLine("Not completed");
                    }
                    WebResponse response = request.EndGetResponse(iar);
    
                    // Open a stream for the response
                    Stream stream = response.GetResponseStream();
                    StreamReader reader = new StreamReader(stream);
    
                    // Create a string for the contents of the web response
                    string output = reader.ReadToEnd();
    
                    // Return the output string
                    OnTranslated(output);
                }
                catch (Exception exc)
                {
                    RaiseError(exc);
                }
            }
    
            public event TranslatorEventHandler Translated;
            public event TranslatorErrorEventHandler TranslationError;
    
            private void OnTranslated(string output)
            {
                this.IsBusy = false;
                if (Translated != null)
                {
                    Dispatcher.BeginInvoke(() =>
                        {
                            TranslatorEventArgs args = new TranslatorEventArgs();
                            args.TranslatedText = output;
                            Translated(this, args);
                        });
                }
            }
    
            private void RaiseError(Exception exc)
            {
                this.IsBusy = false;
                if (TranslationError != null)
                {
    
                    Dispatcher.BeginInvoke(() =>
                        {
                            TranslatorErrorEventArgs args = new TranslatorErrorEventArgs();
                            args.Error = exc;
                            TranslationError(this, args);
                        });
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
            private void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    Dispatcher.BeginInvoke(() =>
                        {
                            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                        });
                }
            }
        }
    
        public delegate void TranslatorEventHandler(object sender, TranslatorEventArgs args);
    
        public class TranslatorEventArgs : EventArgs
        {
            public string TranslatedText { get; set; }
        }
    
        public delegate void TranslatorErrorEventHandler(object sender, TranslatorErrorEventArgs args);
    
        public class TranslatorErrorEventArgs
        {
            public Exception Error { get; set; }
        }
    }

    I hope you like this sample and the translator app.

    Best regards,
    The-Oliver

  • o-LIVE-r

    Windows Phone 7: Navigieren durch eine Anwendung

    • 0 Comments

    Windows Phone 7 verwendet als Anwendungsstruktur das Page-Navigationsmodell von Silverlight. Mit einer kleinen Ausnahme, es gibt keinen Frame in dem navigiert wird. Die Anwendung ist der Frame :)

    Hier ein kleines Beispiel:

    image

    Meine Anwendung die eine Startseite hat und zwei Buttons. Mit diesen Button möchte ich auf jeweils eine andere Seite wechseln. Diese Seiten müssen vom Typ Windows Phone Page sein.

    Der Code der zum Navigieren notwendig ist sieht dann wie folgt aus.

    using System;
    using Microsoft.Phone.Controls;
    
    namespace FeatureDemo
    {
        public partial class MainPage : PhoneApplicationPage
        {
            public MainPage()
            {
                InitializeComponent();
    
                SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
            }
    
            private void _applicationBarDemo_Click(object sender, System.Windows.RoutedEventArgs e)
            {
                NavigationService.Navigate(new Uri("/Pages/ApplicationBarPage.xaml", UriKind.Relative));
            }
    
            private void _rotationDemo_Click(object sender, System.Windows.RoutedEventArgs e)
            {
                NavigationService.Navigate(new Uri("/Pages/RotationPage.xaml", UriKind.Relative));
            }
        }
    }

    Dieses Codebeispiel geht davon aus, das sich die beiden Unterseiten in einem Unterordner namens “Pages” befinden innerhalb meines Projekts befinden.

    Das Zurück-Navigieren geht einfach mit dem “Zurück”-Button des Telefons.

Page 1 of 1 (20 items)