[Windows 8 App]捷徑菜單

[Windows 8 App]捷徑菜單

在Windows 應用商店時,可以為介面中的介面元素新增捷徑菜單,並設置相關的菜單項。

下面通過一個範例來介紹如何為頁面中的圖片新增捷徑菜單

並在捷徑菜單中設置"複製"和"儲存為"菜單項

 

首先,新增一個Windows 市集的空白應用程式,並命名為【ShortcutMenuSetting】

放一張圖片在Assets資料夾下,圖片名稱命名為【cat.jpg】

接著,開啟【MainPage.xaml】,在Grid設計畫面中新增一個Image元素

Image元素名稱為【ShowImage】

將Image元素的Source屬性設置圖片路徑

並在事件中觸發Tapped的事件處理方法

完成Image元素的設定後,在拉進一個TextBlock文字方塊用來顯示訊息,並命名為Output

 

這是【MainPage.xaml】完整程式碼


<Page
    x:Class="ShortcutMenuSetting.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ShortcutMenuSetting"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock x:Name="Output" Height="144" Width="539" FontSize="60" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="426,539,0,0" />
        <Image x:Name="ShowImage" Source="image/cat.jpg" Margin="426,0,0,0" Tapped="ShowImage_Tapped" HorizontalAlignment="Left" VerticalAlignment="Top" Height="406" Width="539"/>
    </Grid>
</Page>

 

打開【MainPage.xaml.cs】

首先,先寫Tapped事件的程式碼,程式碼如下:


private async void ShowImage_Tapped(object sender, TappedRoutedEventArgs e)
        {
            var popupMenu = new PopupMenu();

            UICommand CopyCommand = new UICommand("複製", (command) =>
            {
                Output.Text = "已選擇"" + command.Label + "’";
            });
            popupMenu.Commands.Add(CopyCommand);

            UICommand SaveCommand = new UICommand("另存新黨", (command) =>
            {
                Output.Text = "已選擇"" + command.Label + "’";
            });
            popupMenu.Commands.Add(SaveCommand);

            await popupMenu.ShowForSelectionAsync(GetElementRect((FrameworkElement)sender));
        }

 

在上面的程式碼中,首先定義一個PopupMenu類別的對象popupMenu

接下來為捷徑菜單新增菜單項目,由於新增項目的方式相同

所以我們以新增"複製"來作範例介紹UICommand類別

UICommand類別的對象CopyUICommand,設定構造方法的第一個參數為"複製"

第二個參數為在選擇菜單項後調整的處理方法

接著,以CopyUICommand對象為參數調整popupMenu對象的UICommand.Add方法

將"複製"菜單項目新增到捷徑菜單,以同樣的方式來新增"另存為"

 

接下來定義捷徑菜單的大小與顯示位置


public Rect GetElementRect(FrameworkElement element)
        {
            GeneralTransform buttonTransform = element.TransformToVisual(null);
            Point point = buttonTransform.TransformPoint(new Point());
            Size size = new Size(element.ActualWidth, element.ActualHeight);

            return new Rect(point, size);
        }

 

這是完整的【MainPage.xaml.cs】的程式碼:


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// 空白頁項目範本已記錄在 http://go.microsoft.com/fwlink/?LinkId=234238

namespace ShortcutMenuSetting
{
    /// <summary>
    /// 可以在本身使用或巡覽至框架內的空白頁面。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// 在此頁面即將顯示在框架中時叫用。
        /// </summary>
        /// <param name="e">描述如何到達此頁面的事件資料。Parameter
        /// 屬性通常用來設定頁面。</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private async void ShowImage_Tapped(object sender, TappedRoutedEventArgs e)
        {
            var popupMenu = new PopupMenu();

            UICommand CopyCommand = new UICommand("複製", (command) =>
            {
                Output.Text = "已選擇"" + command.Label + "’";
            });
            popupMenu.Commands.Add(CopyCommand);

            UICommand SaveCommand = new UICommand("另存新黨", (command) =>
            {
                Output.Text = "已選擇"" + command.Label + "’";
            });
            popupMenu.Commands.Add(SaveCommand);

            await popupMenu.ShowForSelectionAsync(GetElementRect((FrameworkElement)sender));
        }

        public Rect GetElementRect(FrameworkElement element)
        {
            GeneralTransform buttonTransform = element.TransformToVisual(null);
            Point point = buttonTransform.TransformPoint(new Point());
            Size size = new Size(element.ActualWidth, element.ActualHeight);

            return new Rect(point, size);
        }
    }
}

 

完成後,我們可以來看專案的執行畫面

 

這是一張圖片,對著圖片點擊滑鼠左鍵,就會跳出捷徑菜單

250

 

捷徑菜單就跳出來了!!

251

 

我們接下來對著捷徑菜單點擊複製

252

 

點擊複製後產生的結果

253

 

那我們點擊另存新黨的結果會是如何呢

254

 

點擊另存新黨的結果如下

255