Splash Screen mit ProgressBar und Backroundworker

hat auf seinem Blog debug mode….. einen Post erstellt, mit einem Designvorschlag für einen Splash Screen mit ProgressBar. Diese Vorgehensweise erlaubt es dem Entwickler seine benötigten Daten für die App geschickt zu verstecken und somit den User nicht nervt mit ständigen Nachladen von Daten. Diese vorgehensweise ist meist aber nur sinnvoll wenn es sich um eine Online App handelt.

image

Abb.: Aufbau des Design Vorschlags

Der Aufbau ist als Usercontrol implementiert, und recht einfach nachvollziehbar.

<Grid x:Name=“LayoutRoot“ Height=“800″ Width=“640″>
<Image Source=“waitsymbol.jpg“
Margin=“0,0,0,0″
VerticalAlignment=“Top“
Height=“650″
HorizontalAlignment=“Left“
Width=“400″
Stretch=“Fill“/>
<TextBlock
Text=“loading….“
HorizontalAlignment=“Left“
Style=“{StaticResource PhoneTextTitle2Style}“
Margin=“185,656,0,97″
/>
<ProgressBar x:Name=“SpalshScreenProgressbar“
Width=“380″
HorizontalAlignment=“Left“
IsIndeterminate=“True“
Margin=“49,707,0,74″ />
</Grid>

Das Control wird einfach in ein PopUp als Child Objekt hinzugefügt.

image

Nun noch den Backround Service einbauen und fertig ist Splash Screen.

clip_image001

Abb.: Fertiges Control im Einsatz

Quelle:

How to create Splash Screen with Progress Bar in Windows Phone 7

Fokus Trigger in Silverlight

Über Mark Monster hatte ich ja schon öfter mal einen Beitrag, heute beschreibt er wie man einen Focus Trigger in Silverlight aufbaut. Einen klassische Trigger sieht wie folgt aus:

public class FocusOnEvent : TargetedTriggerAction<Control>
{
    protected override void Invoke(object parameter)
    {
        Target.Focus();
    }
}

Dieser ist schnell implementiert. Aber sinnvoller ist ein Default Trigger aus dem TargetTriggerAction zu implementieren, dieser könnte wie folgt aussehen:

[DefaultTrigger(typeof(FrameworkElement), typeof(EventTrigger), "Loaded")]
public class FocusOnEvent : TargetedTriggerAction<Control>
{
    protected override void Invoke(object parameter)
    {
        Target.Focus();
    }
}
Und hier der XAML Beispielcode:
<i:Interaction.Triggers>
    <i:EventTrigger>
        <Behaviors:FocusOnEvent TargetName="TitleTextBox" />
    </i:EventTrigger>
</i:Interaction.Triggers>
Quelle:
Mark Monster Blog

 

Windows Phone Starter Kit for Schools

Microsoft hat ein neues Startkit für Schulen auf MSDN eingestellt. Hier soll interessierten Schülern der Einstieg in die Programmierung von Apps für die Windows Phone Plattform schmackhaft gemacht werden.

Abb; Schul App Beispiel

Ganz einfach  wird anhand eines App für eine Schule beschrieben wie eine App entwickelt werden kann. Da sollten sich die Herren der Apfel und Android  Fraktion mal ein Beispiel dran nehmen.

Quelle:

MSDN

Codesnippets für MVVM RelayCommand

Wer viel mit dem Galasoft MVVM Light Framework arbeitet kann sich die Arbeit mit Commands vereinfachen. Jan Hannemann hat auf seinem Blog einen Post erstellt mit Codesnippets für eben diese Definition von RelayCommands.

<?xml version="1.0" encoding="utf-8" ?>
 2: <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
 3: <CodeSnippet Format="1.0.0">
 4: <Header>
 5: <Title>RelayCommand</Title>
 6: <Shortcut>relaycmd</Shortcut>
 7: <Description>Define a RelayCommand</Description>
 8: <Author>Jan Hannemann</Author>
 9: <SnippetTypes>
 10: <SnippetType>Expansion</SnippetType>
 11: </SnippetTypes>
 12: </Header>
 13: <Snippet>
 14: <Declarations>
 15: <Literal>
 16: <ID>CMD</ID>
 17: <ToolTip>Command Property</ToolTip>
 18: <Default>Command</Default>
 19: </Literal>
 20: <Literal>
 21: <ID>CMDF</ID>
 22: <ToolTip>Command Field</ToolTip>
 23: <Default>command</Default>
 24: </Literal>
 25: </Declarations>
 26: <Code Language="csharp">
 27: <![CDATA[
 28: private RelayCommand _$CMDF$;
 29: public RelayCommand $CMD$
 30: {
 31: get
 32: {
 33: return _$CMDF$;
 34: }
 35: }
 36:
 37: /// <summary>
 38: /// Checks whether the $CMD$ command is executable
 39: /// </summary>
 40: private bool Can$CMD$()
 41: {
 42: return true;
 43: }
 44:
 45: /// <summary>
 46: /// Executes the $CMD$ command 
 47: /// </summary>
 48: private void Exec$CMD$()
 49: {
 50: throw new NotImplementedException();
 51: }
 52:
 53: //cut and paste this line to your ctor
 54: _$CMDF$ = new RelayCommand(Exec$CMD$, Can$CMD$);
 55: $end$]]>
 56: </Code>
 57: </Snippet>
 58: </CodeSnippet>
 59: </CodeSnippets>

Diese Codesnippets erleichtern die tägliche Arbeit doch ein wenig, und das Leben des Entwicklers wird wieder etwas schöner.

Quelle:

Bitdisaster

 

App Verkaufswebsite Template

Auf Codeplex ist ein neues Projekt eingestellt worden. Es handelt sich um ein Websitetemplate für den Verkauf von Apps.

Hier ist alles vorhanden, damit das Marketing für seine App sofort starten kann. Der Developer muss nur noch eigene Bilder und Text und Links eintragen.

Abb.: Demo Template Site

Diese Arbeit kann auch von nicht Webdesigner leicht ausgeführt werden.

Quelle:

Codeplex Projekt

Anbindung vom Microphone mit XNA

Für eine aktuell in Entwicklung befindliche App benötige ich das Microphone vom WP7 Handy. Mit dem Mango Update ist es ja möglich XNA und Silverlight zumischen. Einen super Post habe ich gefunden bei .net speaks. Hier wird ein Einstieg geboten wie man ganz einfach ein Micro ansprechen kann.

Windows Phone 7 - Microphone Repeater

Abb: Einfache Demo mit einem Button

Mit folgenden paar Zeilen kann das Micro eingebunden.

using Microsoft.Xna.Framework;
using
Microsoft.Xna.Framework.Audio;
using
System.IO;
using System.Windows.Threading;

Referenzen setzen.

 

Microphone mic = Microphone.Default;
byte[] data = null
;
MemoryStream audio = null;

Micro Init.

private void btnRecord_Click(object sender, RoutedEventArgs e)
{
   if (mic.State == MicrophoneState
.Stopped)
{
mic.BufferDuration = TimeSpan
.FromMilliseconds(100);
data = new byte
[mic.GetSampleSizeInBytes(mic.BufferDuration)];
audio = new MemoryStream
();
mic.Start();
      this.PageTitle.Text = „Recording…“
;
btnRecord.Content = „Stop“
;
}
   else
   {
mic.Stop();
      this.PageTitle.Text = „Playing….“
;
btnRecord.Content = „Record“
;
btnRecord.IsEnabled = false
;
PlayRecordedAudio();
      this.PageTitle.Text = „ready“
;
}
}

Schaut euch den Post mal genau an. Es ist kein großes Problem dieses in einer eigenen App einzusetzen.

Quelle:

Part 24: Windows Phone 7 – Mircophone Repeater

Bing Maps Pushpin Optimierung

Über das Bing Maps Control in WP7 habe ich ja schon einige Posts geschrieben, heute geht es darum ein Clustering Pattern für Mengen von Pins zu erstellen.

Colin Eberhardt von ScottLogic hat in einem Post dieses Problem angegangen und dokumentiert.

Über eine Container Pattern Class wird diese Funktion implementiert.

// <summary> 
/// Clusters the given pins on the supplied map 
/// </summary> 
public PushpinClusterer(Map map, List<Pushpin> pins, DataTemplate clusterTemplate) 
{ _map = map; _pins = pins; ClusterTemplate = clusterTemplate;   _map.ViewChangeEnd += (s, e) => RenderPins(); }     
/// <summary> /// Re-render the pushpins based on the current zoom level /// </summary> 
private void RenderPins() 
{ List<PushpinContainer> pinsToAdd = new List<PushpinContainer>();   
// consider each pin in turn foreach (var pin in _pins) 
{ var newPinContainer = new PushpinContainer(pin, _map.LocationToViewportPoint(pin.Location));
   bool addNewPin = true;   
// determine how close they are to existing pins foreach(var pinContainer in pinsToAdd) 
{ double distance = ComputeDistance(pinContainer.ScreenLocation, newPinContainer.ScreenLocation);   
// if the distance threshold is exceeded, do not add this pin, instead // add it to a cluster 
if (distance < DistanceThreshold) { pinContainer.Merge(newPinContainer); addNewPin = false; break; } }   
if (addNewPin) { pinsToAdd.Add(newPinContainer); } }   
// asynchronously update the map 
_map.Dispatcher.BeginInvoke(() => { _map.Children.Clear(); 
foreach (var projectedPin in pinsToAdd.Where(pin => PointIsVisibleInMap(pin.ScreenLocation, _map))) 
{ _map.Children.Add(projectedPin.GetElement(ClusterTemplate)); } });   
}   

Abb.: Auszug Quellcode

Falls Ihr solche Problematik auch habt dann sollte der Post auch sehr interessieren.

Quelle:

Pushpin Clustering with the Windows Phone 7 Bing Map control

Die Mango App, Microsofts Referenz App

Wie eine moderne App im Mangostyle inklusive Sql Server CE 4.0 Anbindung erstellt wird, hat jetzt das MSDN Magazin in einem Beitrag dagestellt.

Mangolicious Panorama Main Page

Abb.: App für Rezepte und Coktails

Um eine App noch aufzuwerten, ist ein XNA Spiel mit ins App integriert. Dieses ist wirklich eine super Idee und steigert sicher den Benutzerwert eine App. Weil fast jeder Smartphone Nutzter ein kleinen Spielsinn hat.

Hier noch ein Code Snippet wie die Datenbank eingebunden wurde.

public class MangoDataContext : DataContext 
{   public MangoDataContext()     : base("Data Source=isostore:/Mangolicious.sdf") { }     
 public Table<Recipe> Recipes;
   public Table<Fact> Facts;
   public Table<Cocktail> Cocktails; 
}

Hier noch eine Abbildung vom XNA Game.

The XNA Game in Progress

Quelle:

Building a ‚Mango‘ App

Raster & Marker in der Bing Maps

Wer eine App mit Bing Maps plant und nicht so recht weiß wie man Marker und Raster in eine Map integriert, findet eine ganze Reihe von Posts über dieses Thema.

Abb.: Verschiedene Raster auf einer Bing Map

Diese Post sind auf dem Blog von Awkward Coder zu finden. Mit Hilfe von einer Shape Class und einem Template können solche Effekte erstellt werden.

Quelle:

Tessellating shapes on top of Bing Maps in a WP7 app

WP7 Cam als Backround Behavior

Eine nette Idee hatte Joost van Schaik, er hat ein Behavior geschrieben damit die Cam im Phone als Backround Video Streaming genutzt werden kann.

/// A behavior that shows a camera view on the background of a panel
  /// </summary>
  public class CameraViewBackgroundBehavior : Behavior<Panel>
  {
    private PhotoCamera camera;
    private PhoneApplicationFrame parentPage;
    private Uri pageSource;
    private VideoBrush backgroundBrush;

    // Setup and cleanup according to http://bit.ly/dZb6D9

    #region Setup
    protected override void OnAttached()
    {
      base.OnAttached();
      AssociatedObject.Loaded += AssociatedObjectLoaded;
      AssociatedObject.Unloaded += AssociatedObjectUnloaded;
    }
private void AssociatedObjectLoaded(object sender, RoutedEventArgs e)
    {
      DoInit();
    }
    #endregion

    #region Cleanup
    private bool isCleanedUp;

    private void Cleanup()
    {
      if (!isCleanedUp)
      {
        isCleanedUp = true;
        AssociatedObject.Loaded -= AssociatedObjectLoaded;
        AssociatedObject.Unloaded -= AssociatedObjectUnloaded;
        DoCleanup();
      }
    }

    protected override void OnDetaching()
    {
      Cleanup();
      base.OnDetaching();
    }

    private void AssociatedObjectUnloaded(object sender, RoutedEventArgs e)
    {
      Cleanup();
    }
    #endregion
  }

Quelle :

A behavior to show the Windows Phone 7 camera as background