Archiv | Usercontrols RSS for this section

Anleitung zur Planung einer App

Wie jeder gute Entwickler weiss, um gute Software zuschreiben benötigt es guter Planung. Dieses ist auch bei der Entwicklung von Apps für WP7 und WP8 nötig. Aber für die Windows Phone Plattform werden sehr gute Tools angeboten. Einen Vorschlag wie eine Entwicklung vonstatten gehen kann, zeigt der Blogbeitrag Metro App Diary.

Es werden verschiedene Tool mit angesprochen, schaut einfach diesen Post mal an.

Quelle:

Metro App Diary

 

Advertisements

ApplicationBar in neuen Gewand

Auf Windows Phone Geek ist ein Post über eine Advanced Application Bar erschienen. Mit diesem Control kann man nun auch die Visibility und ICommand benutzen, was natürlich die MVVM Pattern nutzenden Entwickler freuen wird.

Mit ein paar Zeilen Code ist eine ansprechende App Bar mit dem oben beschriebenen Support verfügbar.

<Sh:AdvancedApplicationBar>
    <Sh:AdvancedApplicationBarIconButton
        IsEnabled="{Binding AppBarIconButtonEnabled}"
        Text="{Binding AppBarIconButtonText}"
        IconUri="{Binding IconUri}"
        Click="AdvancedApplicationBarIconButton_Click"
        />
    <Sh:AdvancedApplicationBarIconButton
        Text="{Binding AppBarIconButtonText}"
        IconUri="{Binding AppBarIconButtonText}"
        Visibility="{Binding Visibility}"
        Command="{Binding DeleteCommand}"
        CommandParameter="42"
        />
    <Sh:AdvancedApplicationBarIconButton
        Text="static text"
        IconUri="/Images/appbar.feature.settings.rest.png"
        />
    <Sh:AdvancedApplicationBarMenuItem Text="MenuItemTxt" />
</Sh:AdvancedApplicationBar>

Besonders Cool ist aber der Support für Panorama bzw. Pivot Control. So kann jetzt innerhalb jedes Tab eine Application Bar mit unterschiedlichen Buttons aufgebaut werden. Für mich steht fest dieses Control kommt in meine nächste Entwicklung.

Quelle:

Advanced ApplicationBar for Windows Phone

Advanced ApplicationBar for Windows Phone

MetroFlow ein Control der neuen Generation

Wer Apps mit vielen Bildern oder Video Anzeige hat sollte sich mal das neue MetroFlow Control vom Coding4Fun toolkit beschäftigen. Auf WindowsPhoneGeek, wir in einem ersten Beispiel beschrieben wie dieses Control funktioniert.

Alles was benötigt wird ist die neuste Version des Coding4Fun Toolkits.

Mit nur wenigen Zeilen Code ist schon eine erste Anzeige des Controls möglich,

<c4f:MetroFlow>
    <c4f:MetroFlowData Title="Sample 1" />
    <c4f:MetroFlowData
                    ImageUri="Images/bmw1.jpg"
                    Title="BMW 1" />
    <c4f:MetroFlowData ImageUri="Images/bmw1.jpg"/>
</c4f:MetroFlow>
Xaml-Code

image

Abb.: Control in Action

Viele weitere Beispiel findet ihr unter den Ouellen

Quellen:

Coding4Fun Toolkit
 
Getting Started with the Coding4Fun toolkit MetroFlow Control
 

Navigation mit Service

Der NavigationService im MVVM ist für die Steuerung zwischen Views und ViewModel. Wie man diesen Service erstellt und einsetzt, dass kann man im  Rob Garfoot’s Blog in seinem aktuellen Post lesen.

Hier das grundliegende Interface:

public interface INavigationService
{
    void Navigate(string url);
}
Danach sollte die Class erstellt werden
public class NavigationService : INavigationService
{
    private readonly System.Windows.Navigation.NavigationService _navigationService;
    public NavigationService(System.Windows.Navigation.NavigationService navigationService)
    {
        _navigationService = navigationService;
    }
    public void Navigate(string url)
    {
        _navigationService.Navigate(new Uri(url, UriKind.RelativeOrAbsolute));
    }
}
Nun noch im ViewModel integrieren
public interface INavigable
{
    INavigationService NavigationService { get; set; }
}
und ein Navigator im ViewModel
public static class Navigator
{
    public static INavigable GetSource(DependencyObject obj)
    {
        return (INavigable)obj.GetValue(SourceProperty);
    }
    public static void SetSource(DependencyObject obj, INavigable value)
    {
        obj.SetValue(SourceProperty, value);
    }
   public static readonly DependencyProperty SourceProperty =
        DependencyProperty.RegisterAttached("Source", typeof(INavigable), typeof(Navigator), new PropertyMetadata(OnSourceChanged));
    private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        Page page = (Page) d;
        page.Loaded += PageLoaded;
    }
    private static void PageLoaded(object sender, RoutedEventArgs e)
    {
        Page page = (Page)sender;
        INavigable navSource = GetSource(page);
        if (navSource != null)
        {
            navSource.NavigationService = new NavigationService(page.NavigationService);
        }
    }
}
Hier noch ein wenig wie das im XAML eingesetzt wird:
<navigation:Page x:Class="SLNavigation.Page1"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           xmlns:SLNavigation="clr-namespace:SLNavigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="Page1 Page"
           SLNavigation:Navigator.Source="{Binding}"
    >
Quelle:

Augmented Reality XAML Control für WP7 und WinRT

Ich habe ja schon über Augmented Reality Theorie berichtet, aber jetzt hat Morten Nielsen in seinem Blog einen Post erstellt, wie man ein XAML Control erstellt. Das Besondere daran ist, das es nicht nur das Windows Phone unterstützt sondern auch die kommende Windows Version 8 oder besser bekannt für Entwickler Win RT.

Mit diesem Control baue ich eine Informations App für Industrieanlagen. Nun zeige ich noch einige Codeauschnitte:

<ar:ARPanel>
    <TextBlock Text="North" ar:ARPanel.Direction="0,0" />
    <TextBlock Text="East"  ar:ARPanel.Direction="0,90" />
    <TextBlock Text="South" ar:ARPanel.Direction="0,180" />
    <TextBlock Text="West"  ar:ARPanel.Direction="0,270" />
    <TextBlock Text="Up"    ar:ARPanel.Direction="90,0" />
    <TextBlock Text="Down"  ar:ARPanel.Direction="-90,0" />
</ar:ARPanel>

Abb.: AR Control Panel in Xaml

Nachfolgend noch ein Beispiel wie man den Motion Sensor in Win RT und Windows Phone gemeinsam nutzen kann.

#if WINDOWS_PHONE
    if (Microsoft.Devices.Sensors.Motion.IsSupported)
    {
        motion = new Microsoft.Devices.Sensors.Motion();
        motion.CurrentValueChanged += motion_CurrentValueChanged;
        motion.Start();
#elif WINRT
    motion = Windows.Devices.Sensors.OrientationSensor.GetDefault();
    if (motion != null)
    {
        motion.ReadingChanged += motion_CurrentValueChanged;
#endif
    }
    else
    {
        throw new InvalidOperationException("Motion sensor not supported on this device");
    }
#endif

Quellen:

Augmented Reality on Windows Phone and Windows 8 Metro style apps

 

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

 

HubTile Visual States Beispiel

Weil ich gerade sowieso damit in meiner aktuellen APP rumspiele, fand ich den Post auf WindowsPhoneGeek Blog sehr interessant.

Es geht um HubTiles und dem Visual State.

image

Diese Flipping und Expand States werten ein App wirklich auf.

image

Abb: Verschiedene State

Mit den Windows Phone Toolkit sind das nur wenige Zeilen Code. Hier ein Beispiel Code:

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" Orientation="Vertical">
        <toolkit:HubTile x:Name="hubTile" Background="Green" Source="wpglogo.png" Title="Hold Here" Message="This is HubTile message!" Margin="10"/>
        <Button x:Name="btnGoToExpanded" Content=" Go To Expanded State" Click="btnGoToExpanded_Click" />
        <Button x:Name="btnGoToSemiexpanded" Content="Go To Semiexpanded State" Click="btnGoToSemiexpanded_Click" />
        <Button x:Name="btnGoToFlipped" Content="Go To Flipped State" Click="btnGoToFlipped_Click" />
        <Button x:Name="btnGoToCollapsed" Content="Go To Collapsed State" Click="btnGoToCollapsed_Click" />
</StackPanel>

Und hier die Steuerung des Visual State Manager in C#:

private void btnGoToSemiexpanded_Click(object sender, RoutedEventArgs e)
{
    VisualStateManager.GoToState(this.hubTile, "Semiexpanded", true);
}

Quelle:

WindowPhoneGeek Blog
How to Programmatically Switch between the HubTile Visual States

MetroGridHelperClass Hilfe für Developer und Designer

Jeff Wilcox, als bekennender WP7 Fan hat eine Helper Class für XAML Grids geschrieben. Diese hilft beim Erstellen von korrekten Metro Design Feeling. Es ist so leichter auch für den Designer Fehler frühzeitig im Design einer App zu erkennen.

PhoneMetro

Abb.: Zeigt die Class in einer Demo App

Noch einen Vorteil gibt es die Sourcen sind NuGet verfügbar.

Quelle:

Jeff Willcox Blog

 

Metro Style Grundlagen

Da Microsoft nun auch mit Windows 8 den Metro Design Style einführt, ist es für uns Entwickler Zeit sich mit diesem Style für Oberflächen auseinanderzusetzen. Für WP7 Entwickler schon ein fast ein alter Hut, ist für Windows Entwickler dieser Style wohl für die meisten neu.

Auf codefest.at ist ein Beitrag erschienen, wie man sich mit diesem Neuling in der Windows Welt am besten anfreundet. Es entstehen ja in Zukunft immer mehr auf Tablets basierende Systeme.

win8_touch

Microsoft hat ja nun auch schon ein wenig Erfahrung gesammelt mit den Surface Tisch Systemen, so verwundert es nicht das diese Technik nun auch auf Windows 8 Einzug hält.

win8_touch_demo_8_mouse

Quellen:

codefest.at
buildwindows