快速构建Windows 8风格应用32-构建辅助磁贴
引言
Windows Phone中,我們開(kāi)發(fā)者可能會(huì)開(kāi)發(fā)的一個(gè)功能點(diǎn)是將數(shù)據(jù)列表中某一項(xiàng)“Pin To Start(固定到開(kāi)始屏幕)”,大家都知道這種固定到開(kāi)始屏幕的磁貼叫做輔助磁貼(也叫二級(jí)磁貼),用戶可以通過(guò)該輔助磁貼啟動(dòng)應(yīng)用程序并導(dǎo)航到應(yīng)用程序中某一個(gè)頁(yè)面或某一位置。
其實(shí)Windows 8 Store風(fēng)格應(yīng)用程序也引入了輔助磁貼的概念,用戶在使用Windows 8 Store應(yīng)用的輔助磁貼和Windows Phone 輔助磁貼的體驗(yàn)幾乎一樣,但是對(duì)于開(kāi)發(fā)者來(lái)說(shuō)實(shí)現(xiàn)方式完全不一樣了。
一、輔助磁貼概覽
- 由應(yīng)用中某些元素的“固定(Pin)”操作生成
- 應(yīng)用通過(guò)簡(jiǎn)單的運(yùn)行時(shí)調(diào)用啟動(dòng)“固定” 操作
- 用戶通過(guò)系統(tǒng) UI 確認(rèn)“固定”操作
- 展示應(yīng)用的個(gè)性化界面
- 與應(yīng)用磁貼具備相同功能
- 點(diǎn)擊磁貼則啟動(dòng)應(yīng)用并導(dǎo)航到相應(yīng)內(nèi)容頁(yè)面
另外輔助磁貼常用場(chǎng)景包括:
- 天氣應(yīng)用中特定城市的天氣更新
- 日歷應(yīng)用中有關(guān)近期活動(dòng)的摘要
- 社交應(yīng)用中重要聯(lián)系人的狀態(tài)和更新
- RSS 閱讀器中的特定源
- 音樂(lè)播放列表
- 博客
更多關(guān)于輔助磁貼介紹可參考:輔助磁貼概述(Windows 應(yīng)用商店應(yīng)用) (Windows)
二、輔助磁貼構(gòu)建
上面對(duì)輔助磁貼進(jìn)行了簡(jiǎn)單的介紹,那么我們開(kāi)發(fā)者該如何在應(yīng)用程序內(nèi)添加構(gòu)建輔助磁貼的功能呢?
1.添加Windows.UI.StartScreen 命名空間
2.添加樣式資源(該步驟可根據(jù)自己實(shí)際情況是否執(zhí)行)
通常我們會(huì)使用應(yīng)用程序中提供StandardStyles.xaml 文件中的“固定”和“取消固定圖標(biāo)”樣式資源。當(dāng)然我們也可以自己定義相應(yīng)的樣式資源。
StandardStyles.xaml 文件提供的標(biāo)準(zhǔn)樣式資源如下:
1: <Page.Resources>
2: <Style x:Key="PinAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
3: <Setter Property="AutomationProperties.AutomationId" Value="PinAppBarButton"/>
4: <Setter Property="AutomationProperties.Name" Value="Pin to Start"/>
5: <Setter Property="Content" Value=""/>
6: </Style>
7: <Style x:Key="UnpinAppBarButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
8: <Setter Property="AutomationProperties.AutomationId" Value="UnpinAppBarButton"/>
9: <Setter Property="AutomationProperties.Name" Value="Unpin from Start"/>
10: <Setter Property="Content" Value=""/>
11: </Style>
12: </Page.Resources>
3.添加應(yīng)用欄
通常我們會(huì)在應(yīng)用欄中添加“固定到開(kāi)始屏幕”按鈕,用戶通過(guò)該按鈕進(jìn)行輔助磁貼的創(chuàng)建。
1: <Page.BottomAppBar>
2: <AppBar x:Name="SecondaryTileAppBar" Padding="10,0,10,0" >
3: <Grid>
4: <Grid.ColumnDefinitions>
5: <ColumnDefinition Width="30*"/>
6: </Grid.ColumnDefinitions>
7: <StackPanel x:Name="RightPanel" Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right">
8: <Button x:Name="PinButton" HorizontalAlignment="Left" Click="OnPinButtonClicked" />
9: </StackPanel>
10: </Grid>
11: </AppBar>
12: </Page.BottomAppBar>
4.在頁(yè)面的.cs文件中添加標(biāo)識(shí)輔助磁貼的唯一ID變量
1: public const string appbarTileId = "SecondaryTile.AppBar";
5.創(chuàng)建判斷是否存在相關(guān)輔助磁貼的方法,若存在顯示UnpinAppBarButtonStyle樣式資源,若不存在顯示PinAppBarButtonStyle樣式資源。
1: private void ToggleAppBarButton(bool showPinButton)
2: { 3: PinButton.Style = (showPinButton) ? (this.Resources["PinAppBarButtonStyle"] as Style) : (this.Resources["UnpinAppBarButtonStyle"] as Style);
4: } 6.創(chuàng)建“固定到開(kāi)始”按鈕點(diǎn)擊事件
1: private async void OnPinButtonClicked(object sender, RoutedEventArgs e)
2: { 3: //當(dāng)用戶選擇應(yīng)用欄上的按鈕時(shí),會(huì)顯示一個(gè)要求用戶進(jìn)行確認(rèn)的彈出窗口。
4: //若要確保在顯示彈出窗口時(shí)不取消應(yīng)用欄,必須設(shè)置應(yīng)用欄的 IsSticky 屬性。
5: this.BottomAppBar.IsSticky = true;
6: if (SecondaryTile.Exists(appbarTileId))
7: { 8: //取消相應(yīng)的輔助磁貼
9: SecondaryTile secondaryTile = new SecondaryTile(appbarTileId);
10: bool isUnpinned = await secondaryTile.RequestDeleteForSelectionAsync(GetElementRect((FrameworkElement)sender), Windows.UI.Popups.Placement.Above);
11: ? 12: ToggleAppBarButton(isUnpinned); 13: } 14: else
15: { 16: //輔助磁貼的一些屬性才能固定輔助磁貼.
17: //?磁貼的唯一 ID
18: //?短名稱
19: //?顯示名稱
20: //?磁貼選項(xiàng)
21: //?徽標(biāo)圖像
22: //?激活輔助磁貼時(shí)將傳遞到父應(yīng)用程序的參數(shù)字符串
23: Uri logo = new Uri("ms-appx:///Assets/1.jpg");
24: string tileActivationArguments = appbarTileId + " was pinned at " + DateTime.Now.ToLocalTime().ToString();
25: ? 26: SecondaryTile secondaryTile = new SecondaryTile(appbarTileId,
27: "Secondary tile pinned via AppBar",
28: "SDK Sample Secondary Tile pinned from AppBar",
29: tileActivationArguments, 30: TileOptions.ShowNameOnLogo, 31: logo); 32: //指定前景文本顏色和小徽標(biāo)。
33: secondaryTile.ForegroundText = ForegroundText.Dark; 34: secondaryTile.SmallLogo = new Uri("ms-appx:///Assets/1.jpg");
35: //調(diào)用異步方法將輔助磁貼固定。
36: //實(shí)際上這種方法不是將磁貼直接固定到“開(kāi)始”屏幕,而是會(huì)顯示一個(gè)要求用戶允許這樣做的確認(rèn)提示框。
37: bool isPinned = await secondaryTile.RequestCreateForSelectionAsync(GetElementRect((FrameworkElement)sender), Windows.UI.Popups.Placement.Above);
38: ? 39: ToggleAppBarButton(!isPinned); 40: } 41: this.BottomAppBar.IsSticky = false;
42: } 7.檢索之前定義的pin按鈕的邊界矩形,因?yàn)樵诠潭ㄝo助磁貼前,用戶必須確認(rèn),要求對(duì)此進(jìn)行確認(rèn)的彈出窗口應(yīng)當(dāng)顯示在調(diào)用固定請(qǐng)求的按鈕旁邊。
1: public Rect GetElementRect(FrameworkElement element)
2: { 3: GeneralTransform buttonTransform = element.TransformToVisual(null);
4: Point point = buttonTransform.TransformPoint(new Point());
5: return new Rect(point, new Size(element.ActualWidth, element.ActualHeight));
6: } 到此為止我們可以通過(guò)以上步驟實(shí)現(xiàn)一個(gè)輔助磁貼的構(gòu)建了。
三、示例的運(yùn)行效果
運(yùn)行應(yīng)用程序,彈出應(yīng)用欄,點(diǎn)擊“Pin To Start”按鈕彈出窗口。
點(diǎn)擊“固定到‘開(kāi)始’屏幕”按鈕之后,我們?cè)陂_(kāi)始屏幕上就可以看到相應(yīng)創(chuàng)建的輔助磁貼。
當(dāng)我們?cè)诨氐綉?yīng)用程序,就看到應(yīng)用欄按鈕發(fā)生了變化。
點(diǎn)擊“Unpin form Start”按鈕之后,彈出“從‘開(kāi)始’屏幕取消固定”的窗口,我們點(diǎn)擊按鈕之后就把相應(yīng)的輔助磁貼取消了。
?
更多關(guān)于輔助磁貼開(kāi)發(fā)資料可參考:
1.輔助磁貼概述(Windows 應(yīng)用商店應(yīng)用) (Windows)
2.快速入門(mén):固定輔助磁貼(使用 C#/VB/C++ 和 XAML 的 Windows 應(yīng)用商店應(yīng)用) (Windows)
3.快速入門(mén):如何向輔助磁貼發(fā)送通知(使用 C#/VB/C++ 和 XAML 的 Windows 應(yīng)用商店應(yīng)用) (Windows)
4.Secondary tiles sample
轉(zhuǎn)載于:https://www.cnblogs.com/wzk89/archive/2013/01/06/2847939.html
總結(jié)
以上是生活随笔為你收集整理的快速构建Windows 8风格应用32-构建辅助磁贴的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 狗证多少钱啊?
- 下一篇: 黄山风景区换乘中心可以寄存行李吗