Advertisement
  1. Code
  2. Windows

Vytvoření první univerzální Windows aplikace

Scroll to top
Read Time: 10 min

Czech (Čeština) translation by Tereza Foretová (you can also view the original English article)

Univerzální aplikace pro Windows umožňují zacílit každé zařízení s Windows v jednom řešení. Rozvíjet jednou, sdílet většinu kódu a nasazení na Windows, Windows Phone nebo Xbox.

Cílem je maximalizovat opětovné použití kódu. Můžete sdílet kód, uživatelské ovládací prvky, styly, struny a ostatní aktiva mezi Windows Phone a Windows 8 projekty v aplikaci Visual Studio. To snižuje úsilí potřebné při budování a udržování aplikací pro každý typ zařízení.

Úvod

Z jako vývojář pohledu univerzální aplikace pro Windows není jediný binární soubor, který běží na různých platformách. Spíše to má podobu Visual Studio roztoku obsahujícího více projektů, jeden projekt pro každou cílovou platformu kromě sdílený projekt obsahující kód a zdroje sdílené mezi platformami. Mnoho kódu lze sdílet mezi projekty, stejně jako Windows Phone 8.1 implementuje většinu rozhraní API WinRT, která implementuje Windows 8.1.

Můžete vytvářet aplikace pro Windows Phone Silverlight runtime (verze 8.0 nebo 8.1) nebo WinRT runtime (jeden z univerzálních aplikací pro windows). WinRT runtime umožňuje vytvořit jednu aplikaci, která bude spuštěna v systému Windows, Windows Phone a dokonce i Xbox One.

Použili jsme XAML framework vytvořit aplikaci pro více platforem. V současné verzi je API konvergence 90 %, ale stále tam je že malá sada není Sblíženo ještě. Funkce Windows Phone, k dispozici pouze v rámci programu Silverlight jsou:

  • Objektivy podpora
  • VoIP podpora
  • Úkol sběr fotoaparát
  • Rozhraní API schránky
  • Zamknout obrazovku tapeta API

V tomto kurzu používám univerzální šablona aplikace systému Windows vytvořit aplikaci Hex hodiny, hodiny přesně hexadecimální. Prochází celý rozsah barev 24 hodin z #000000 na #235959. S každým klíště hodiny aplikace pozadí se změní na barvu odpovídající současné době převedeny na šestnáctkové. Používá stejné provedení jako Hex barevný JS hodiny pro generování hex kód aktuální čas.

Design byl inspirován Windows Phone 7 hodiny tutoriál na Tuts. Zatímco aplikaci hodiny se zaměřuje pouze na Windows Phone, používáme jeho návrh udělat podobnou aplikaci pro Windows Phone 8.1 a Windows 8.1. Následující snímek obrazovky zobrazuje, co budeme stavět.

Final image of how hexadecimal clock will lookFinal image of how hexadecimal clock will lookFinal image of how hexadecimal clock will look

V tomto tutoriálu budu diskutovat o následujících tématech, které jsou důležité pro vývoj univerzálních aplikací pro Windows:

  • struktura univerzálních aplikací pro Windows
  • přepnutí spuštění projekty v aplikaci Visual Studio
  • přepínač kontext pro univerzální aplikace pro Windows v editoru sady Visual Studio
  • Jak psát kód platformy ve sdíleném projektu
  • Jak přidat podporu pro systém Windows nebo Windows Phone k existujícímu projektu
  • budování univerzální aplikace pro Windows od začátku

1. struktura univerzálních aplikací pro Windows

Univerzální aplikace pro Windows je sbírka tří projektů v složce volitelného řešení. Windows a Windows Phone projekty jsou projekty platformy a jsou zodpovědné za vytváření balíčků aplikací (.appx), zaměřených na příslušných platforem. Tyto projekty obsahují aktiv, které jsou specifické pro platformu cílem.

Sdílený projekt je kontejner pro kód, který běží na obou platformách. Oni nemají binární výstup, ale jejich obsah je dovezl projekty platformy a jako součást procesu sestavení lze generovat balíčky aplikace (.appx).

Snímek níže ukazuje řešení, Visual Studio vytvoří, když zvolíte šablonu projektu pro prázdné aplikace (Universal Apps).

Universal app solution structureUniversal app solution structureUniversal app solution structure

Visual Studio 2013 Update 2 představuje novou funkci, která je univerzální aplikace pro Windows. Stáhněte a nainstalujte tuto aktualizaci dříve, než začnete vytvářet univerzální aplikace pro Windows.

2. přepínání projektů po spuštění

Při spuštění řešení, projekt, který spouští je ten, který je vybrán jako projekt při spuštění. Chcete-li nastavit projekt při spuštění, klepněte pravým tlačítkem myši na uzel projektu v Průzkumníku řešení a vyberte možnost nastavit jako projekt při spuštění. Můžete rychle přepínat projekt při spuštění z ladění cíl drop-down, která nyní vytvoří výčet všech možných projektů v řešení.

Switching startup projectsSwitching startup projectsSwitching startup projects

Projekt, který si vyberete se zobrazí v tučně v aplikaci Solution Explorer. Cíle k dispozici ladění změnit při přepínání projektů po spuštění.

  • Když Windows projekt je projekt při spuštění, ladění cílového rozevíracího seznamu zobrazí možnosti pro Windows simulátor nebo místního počítače.
  • Když Windows Phone projekt je projekt při spuštění, drop-down se zobrazí možnosti pro zařízení, stejně jako různé emulátory.

3. kontext rákoska v editoru kódu

Při psaní kódu v sdíleného projektu, můžete použít přepínač kontext projektu v navigačním panelu vyberte platformu, kterou aktivně volíte, který následně upravuje možnosti technologie IntelliSense v editoru kódu.

Context switcher in the editorContext switcher in the editorContext switcher in the editor

Pokud používáte rozhraní API v sdílený kód, který není podporován na obou platformách, chybová zpráva při sestavení projektu identifikuje toto rozhraní API. Není nutné budovat projekt potvrďte, že používáte rozhraní API platformy.

Následující obrázek ukazuje příklad varovné ikony a technologie IntelliSense pro typ, který je podporován pouze v aplikacích pro Windows Phone.

Example of warning icons and IntellisenseExample of warning icons and IntellisenseExample of warning icons and Intellisense

4. Cross platformní kód v sdíleného projektu

Ve sdíleném projektu obvykle napíšete kód, který je společný pro obě platformy. Chcete-li izolovat části kódu, které jsou specifické pro platformu, pomocí direktivy #ifdef. Konstanty WINDOWS_APP a WINDOWS_PHONE_APP jsou předdefinovány pro vás.

Podmíněné kompilace konstanty, které slouží k psát kód specifický pro platformu jsou následující:

C# WINDOWS_APP
WINDOWS_PHONE_APP
C++
WINAPI_FAMILY_PC_APP
WINAPI_FAMILY_PHONE_APP

Při psaní kódu v sdíleného projektu, Visual Studio editor kódu používá kontext tohoto cíle jedné platformy, nebo druhé. V jazyce C# IntelliSense, který jste vidět, jak psát kód je specifický pro kontextu editoru kódu, tedy specifické pro systém Windows nebo Windows Phone.

5. Přidání podpory pro Windows/Windows Phone

Pokud již máte existující aplikace Windows 8.1, můžete použít příkaz Přidat Windows Phone 8.1 Chcete-li přidat nový projekt Windows Phone 8.1 a sdílený projekt do řešení. Podobnou možnost je také k dispozici, pokud máte Windows Phone 8.1 aplikace a chcete-li přidat podporu pro Windows 8.1.

Chcete-li přidat podporu pro jeden typ zařízení nebo, v aplikaci Solution Explorer, klepněte pravým tlačítkem myši na projekt a zvolte možnost přidat Windows Phone 8.1 nebo Windows 8.1 Přidat.

Add Windows 81 app to existing Windows Phone 81 projectAdd Windows 81 app to existing Windows Phone 81 projectAdd Windows 81 app to existing Windows Phone 81 project

Tady Visual Studio přidá nový Windows Phone nebo Windows projektu do roztoku. Sdíleného projektu je automaticky vytvořen pro vás.

Následující obrázek ukazuje řešení po přidání Windows Phone projekt k existujícímu projektu Windows. Sdílený projekt, který je přidán do řešení je zpočátku prázdné.

Project structure after adding a Windows 81 project to an existing Windows Phone 81 appProject structure after adding a Windows 81 project to an existing Windows Phone 81 appProject structure after adding a Windows 81 project to an existing Windows Phone 81 app

Všimněte si, že pokud vytváříte aplikace pomocí univerzální Windows aplikace šablony, sdílený projekt již obsahuje soubor App.xaml.

Krok 1: Přesunout soubory do sdíleného projektu

Můžete přesunout jakýkoli kód, který chcete sdílet mezi aplikací na sdíleném projektu. Například můžete přesunout složky společné, DataModel a řetězce na sdíleném projektu. Můžete dokonce přejít App.xaml na sdíleném projektu.

Může se však zobrazit některé chyby kompilátoru o kódu, který přesunete do sdíleného projektu. Tyto chyby lze vyřešit nakonfigurováním svůj nový projekt app mít stejnou sadu odkazů jako počáteční projekt.

Následující obrázek ukazuje stejný odkaz sestavení přidán do obou projektů.

Adding same assembly reference to both projectsAdding same assembly reference to both projectsAdding same assembly reference to both projects

Pokud váš sdílený kód používá rozhraní API, které jsou specifické pro Windows, pomocí direktivy #ifdef s WINDOWS_APP konstantou izolovat tuto část kódu. Použijte konstantu WINDOWS_PHONE_APP izolovat části kódu, které jsou specifické pro Windows Phone 8.1.

Krok 2: Sdílet App.xaml

Když vytvoříte nové řešení pro univerzální aplikace pro Windows, Visual Studio umístí App.xaml ve sdíleném projektu. Je-li převést existující projekt univerzální Windows aplikace, můžete přesunout App.xaml do sdíleného projektu ručně. Budete muset nastavit sestavení akce vlastnost stránky ApplicationDefinition po přesunutí souboru. Zde jsou kroky, které:

  • V aplikaci Solution Explorer, v sdíleného projektu vyberte soubor App.xaml.
  • Vyberte zobrazení, video vlastnosti okno.
  • V Vlastnosti okno, v seznamu akce vyberte ApplicationDefinition.

Také budete muset rozhodnout, jakým způsobem chcete otevřít první stránku aplikace. Pokud sdílíte soubor App.xaml a chcete použít jinou úvodní stránku pro každou aplikaci, budete muset přidat direktivy #ifdef, jak je uvedeno níže.

1
#if WINDOWS_APP

2
if (!rootFrame.Navigate(typeof(HubPage)))
3
#endif

4
#if WINDOWS_PHONE_APP

5
if (!rootFrame.Navigate(typeof(WindowsPhoneStartPage)))
6
#endif

7
{
8
    throw new Exception("Failed to create initial page");
9
}

6. Začněte psát aplikace pro Universal Windows

Krok 1: Nastavení projektu

Za prvé vyberte šablonu projektu pro univerzální aplikace pro Windows v dialogovém okně Nový projekt. Následující obrázek ukazuje univerzální šablony projektu aplikace Windows, které jsou v současnosti k dispozici pro jazyk C#.

Universal Windows app templatesUniversal Windows app templatesUniversal Windows app templates

Pojmenujte projekt. Budu používat Hex hodiny Pro můj projekt.

Krok 2: Vytvoření uživatelského rozhraní

Z větší části pracovní uživatelské rozhraní probíhá v platforma specifické projekty, umožňuje vytvořit uživatelské rozhraní, které vypadají skvěle na PC, tablety a telefony, ale které sdílejí společná data, zdroje, komponent a dokonce i pohled modely.

Namísto budování samostatné uživatelského rozhraní pro Windows Phone 8.1 a Windows 8.1 verze Hex hodiny Pro, jsem definovat společný návrh ve sdíleném projektu. Musím jen udělat pár změn v XAML aplikaci hodiny na Tuts + aby to fungovalo pro obě platformy.

1
<Canvas x:Name="ContentPanel" Margin="12,0,620,0" HorizontalAlignment="Center" Grid.Row="1" RenderTransformOrigin="0.5,0.5">
2
    <Canvas.RenderTransform>
3
        <CompositeTransform Rotation="-30"/>
4
    </Canvas.RenderTransform>
5
    <Canvas x:Name="TimeText" Height="315" Canvas.Left="-18" Canvas.Top="288" Width="496" RenderTransformOrigin="0.5,0.5" Opacity="0">
6
        <Canvas.RenderTransform>
7
            <CompositeTransform/>
8
        </Canvas.RenderTransform>
9
        <TextBlock x:Name="TimeHours" TextWrapping="Wrap" Text="12" Canvas.Top="24" Style="{StaticResource TimeTextStyle}" Canvas.Left="-67" Width="267" TextAlignment="Right"/>
10
        <TextBlock x:Name="TimeDots" Canvas.Left="204" TextWrapping="Wrap" Text=":" Style="{StaticResource TimeTextStyle}"/>
11
        <TextBlock x:Name="TimeMinutes" Canvas.Left="263" TextWrapping="Wrap" Text="59" Canvas.Top="24" Style="{StaticResource TimeTextStyle}" Width="257"/>
12
    </Canvas>
13
    <Rectangle x:Name="HorizontalSeparator" Height="4" Canvas.Left="-400" Canvas.Top="295" Width="1020" Fill="White"/>
14
    <Rectangle x:Name="VerticalSeparator" Fill="White" Height="469" Canvas.Left="213" Canvas.Top="489" Width="4"/>
15
    <TextBlock x:Name="ApplicationTitle" TextWrapping="Wrap" Text="HEX CLOCK PRO" Canvas.Top="271" Foreground="White" FontSize="16" Canvas.Left="18"/>
16
    <TextBlock x:Name="SecondsLabel" Height="36" Canvas.Left="23" TextWrapping="Wrap" Text="seconds" Canvas.Top="475" Width="166" TextAlignment="Right" Style="{StaticResource SmallTextStyle}" Margin="0"/>
17
    <TextBlock x:Name="TimeSeconds" Height="205" Canvas.Left="3" TextWrapping="Wrap" Text="59" Canvas.Top="505" Width="210" FontSize="186.667" RenderTransformOrigin="0.5,0.5" Opacity="0">
18
        <TextBlock.RenderTransform>
19
            <CompositeTransform/>
20
        </TextBlock.RenderTransform>
21
    </TextBlock>
22
    <TextBlock x:Name="DateText" Height="39" Canvas.Left="208" TextWrapping="Wrap" Text="2012/12/31" Canvas.Top="258" Width="143" FontSize="29.333" Opacity="0"/>
23
</Canvas> 

Krok 3: Sdílení kódu

Jak je popsáno dříve, kód, který je společný pro obě platformy lze umístit ve sdíleném projektu. Kód, který používá platformu API musí být umístěny v jednom z projektů specifický pro platformu. #ifdef směrnic můžete dokonce do sdíleného souboru zadat kód specifický pro platformu.

Jak Hex hodiny Pro aplikace nepoužívá žádné rozhraní API, které jsou specifické pro platformu, můžu veškerý kód ve sdíleném projektu.

Skrytím stavového řádku

MainPage.xaml.cs ve sdíleném projektu jsme použili #ifdef směrnice izolovat kódu specifické pro Windows Phone. Kód uzavřený do #ifdef skryje stavový řádek na Windows Phone.

1
public MainPage()
2
{
3
    this.InitializeComponent();
4
    #if WINDOWS_PHONE_APP
5
    ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);
6
    #endif
7
}

Zobrazení aktuálního času

Použil jsem DispatcherTimer třídy k volání počáteční klíště při načítání mřížka LayoutRoot. Objekt timer volá funkci timer_Tick na každé klíště hodiny.

1
try
2
{
3
    DispatcherTimer timer = new DispatcherTimer();
4
    timer.Tick += timer_Tick;
5
    timer.Interval = new TimeSpan(0, 0, 0, 1);
6
    timer.Start();
7
    timer_Tick(null, null);             //Call an initial tick

8
}
9
catch { }

Funkce timer_Tick aktualizuje zobrazení času v aplikaci a zároveň platí, že aktualizuje barvu pozadí.

Aktualizace barvu pozadí

Barva pozadí je nastavena na šestnáctkovou barvu, která odpovídá aktuální čas.

1
HexColour color = new HexColour(hexTime);
2
SolidColorBrush bgBrush = new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B));
3
LayoutRoot.Background = bgBrush;

Objekt třídy HexColour je inicializován s aktuální čas vrácení odpovídající hodnoty RGB. Konstruktor třídy nastaví HexColour A, R, G, B hodnoty pro zadanou barvu.

1
public HexColour(string hexCode)
2
{
3
    if (hexCode == null)
4
    {
5
        throw new ArgumentNullException("hexCode");
6
    }
7
8
    if (!Regex.IsMatch(hexCode, HEX_PATTERN))
9
    {
10
        throw new ArgumentException("Format must be #000000 or #FF000000 (no extra whitespace)", "hexCode");
11
    }
12
13
    // shave off '#' symbol

14
    hexCode = hexCode.TrimStart('#');
15
16
    // if no alpha value specified, assume no transparency (0xFF)

17
    if (hexCode.Length != LENGTH_WITH_ALPHA)
18
        hexCode = String.Format("FF{0}", hexCode);
19
20
    _color = new Color();
21
    _color.A = byte.Parse(hexCode.Substring(0, 2), NumberStyles.AllowHexSpecifier);
22
    if (_color.A < 50)
23
        _color.A = 50;
24
    _color.R = byte.Parse(hexCode.Substring(2, 2), NumberStyles.AllowHexSpecifier);
25
    _color.G = byte.Parse(hexCode.Substring(4, 2), NumberStyles.AllowHexSpecifier);
26
    _color.B = byte.Parse(hexCode.Substring(6, 2), NumberStyles.AllowHexSpecifier);
27
}

Přidání animace a efekty

Napodobil jsem úvodní animace použité v předchozí aplikaci hodiny na Tuts + a je inicializována při načítání LayoutRoot.

1
Storyboard sb = (Storyboard)this.Resources["IntialAnimation"];
2
sb.BeginTime = TimeSpan.FromSeconds(0.1);
3
sb.Begin();

To je vše co potřebujeme k vytvoření Hex hodiny Pro aplikace. Aplikace využívá 100 % sdílený kód. Jen je třeba vytvořit samostatné aplikace balíčky pro obě platformy. Aplikace je velmi podobný na Windows Phone a používá stejný kód jazyka XAML pro své uživatelské rozhraní.

Hex Clock Pro for Windows Phone 81Hex Clock Pro for Windows Phone 81Hex Clock Pro for Windows Phone 81

Všimněte si, že jsem přidal všechny XAML a C# kódu v sdíleného projektu, ale když jsem nasadit aplikaci pro Windows nebo Windows Phone app, kód v sdíleného projektu je interně sloučen s projekty specifický pro platformu.

Závěr

Sdílí většinu kódu pro aplikace pro Windows a Windows Phone aplikace a uživatelské rozhraní jsou sice oddělené, jsou natolik podobné, že obě budovy je méně práce než budování dvě uživatelská rozhraní od začátku.

Pokud jsem stavěl Windows Phone verzi Hex hodiny Pro pro Windows Phone 7 nebo 8, to by bylo mnohem více práce, Windows Phone 7 neobsahuje žádné WinRT API a Windows Phone 8 obsahuje pouze malou skupinu.

Windows 10, uvidíme další konvergence, což znamená jeden API – WinRT API – pro více platforem a vysokým stupněm věrnosti mezi prvky uživatelského rozhraní pro každou platformu, která nezabrání vývojáři používající platformu prvků prezentovat nejlepší možné zkušenosti na každém zařízení. Klidně ke stažení zdrojových souborů pro použití jako referenční kurz. Hex hodiny Pro je také k dispozici na Marketplace pro Windows Phone 8.1 a Windows 8.1.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.