티스토리 뷰

Previous Platforms

Tile create

kaki104 2012. 1. 7. 01:29
반응형

윈폰의 얼굴 마담이라고 할 수 있는 타일에 대해서 알아 보고 타일을 간단하게 만들고 조작을 해보자. 타일이 되어야 노티피케이션 작업을 타일에 뿌릴 수 있으니..

 

1. 엡에 타일은 기본 타일인 ApplicationTile이 존재하고, 타일을 추가도 할 수 있다.
타일에 대한 자세한 설명은 MSDN을 참고한다.
http://msdn.microsoft.com/en-us/library/hh202948(v=vs.92).aspx
타일 오퍼레이션에 대한 추가 예제는 SDK 예제를 참고한다. Tile Sample
http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx

 2. WPSample1

하단에 툴바를 살려서 +를 누르면 세컨드리타일을 추가해서 바탕화면에 깔아 놓고, -를 누르면 세컨드리타일을 삭제하는 기능을 구현했다... 무지 간단한 내용이니 한번 보자

3. MainPage.xaml

<phone:PhoneApplicationPage
    x:Class="WPSample1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="696"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="kaki Application" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Sample1 Main" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          
        </Grid>
    </Grid>
 
    <!--Sample code showing usage of ApplicationBar-->
    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton IconUri="/icons/appbar.add.rest.png" Text="Pin" Click="ApplicationBarIconButton_Click"/>
            <shell:ApplicationBarIconButton IconUri="/icons/appbar.minus.rest.png" Text="Unpin" Click="ApplicationBarIconButton_Click"/>
            <!--<shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="Pin"/>
                <shell:ApplicationBarMenuItem Text="Unpin"/>
            </shell:ApplicationBar.MenuItems>-->
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>

</phone:PhoneApplicationPage>

4. MainPage.xaml.cs

using System;
using System.Linq;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;

namespace WPSample1
{
    public partial class MainPage : PhoneApplicationPage
    {
        //생성자
        public MainPage()
        {
            InitializeComponent();
        }

        //하단 툴박스 클릭 이벤트 처리
        private void ApplicationBarIconButton_Click(object sender, System.EventArgs e)
        {
            ApplicationBarIconButton btn = sender as ApplicationBarIconButton;
            if (btn != null)
            {
                //var shellTile = ShellTile.ActiveTiles.FirstOrDefault(); //ApplicationTile

                //에플리케이션의 타일중 SecondaryTile 존재 여부 확인
                var shellTile = ShellTile.ActiveTiles
                    .FirstOrDefault(p => p.NavigationUri.ToString().Contains("MainPage.xaml"));

                //버튼 텍스트를 가지구 어떤 버튼인지 확인
                switch (btn.Text)
                {
                    case "Pin":
                        //Pin버튼이라면 바탕화면에 타일이 존재 하지 않는 경우에만 타일 생성
                        if (shellTile == null)
                        {
                            //타일 생성
                            var tileData = new StandardTileData
                            {
                                Title = "Sample1",
                                Count = 1,
                                BackgroundImage = new Uri("/icons/appbar.sleep.png", UriKind.Relative),
                                BackTitle = "Back Sample1",
                                BackContent = "Back Content",
                                BackBackgroundImage = new Uri("/icons/appbar.sleep.dark.png", UriKind.Relative)
                            };
                            ShellTile.Create(new Uri("/MainPage.xaml", UriKind.Relative), tileData);

                            MessageBox.Show("Pin 작업을 완료했습니다.");
                        }
                        break;
                    case "Unpin":
                        //Unpin버튼이라면 타일이 존재하는 경우에 타일 제거
                        if (shellTile != null)
                        {
                            shellTile.Delete();
                            MessageBox.Show("UnPin 작업을 완료했습니다.");
                        }
                        break;
                }
            }
        }
    }
}

5. 타일에 대한 더 자세한 설명은..
MSDN을 참고 하도록하고, 다음에는 이 타일에 노티피케이션 데이터를 처리하도록 기능을 추가하도록 하겠다.

 

wpsample1_1회차.zip
다운로드

반응형
댓글