work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ContextMenu的使用

Posted on 2012-03-27 17:09  work hard work smart  阅读(11554)  评论(0编辑  收藏  举报

ContextMenu的使用

下面代码的效果是右键单击图片时,显示菜单。当单击菜单的某项时,执行相应的命令。

Image.RightTapped += new RightTappedEventHandler(Image_RightTapped);

 

        async void Image_RightTapped(object sender, RightTappedRoutedEventArgs e)
        {
            var menu = new PopupMenu();
            menu.Commands.Add(new UICommand("Open with", (command) =>
                {
                    Display.Text = "'" + command.Label + "' selected";
                }));
            menu.Commands.Add(new UICommand("Save attachment", (command) =>
            {
                Display.Text = "'" + command.Label + "' selected";
            }));

            var chosenCommand = await menu.ShowForSelectionAsync(GetElementRect((FrameworkElement)sender));
            if (chosenCommand == null)
            {
                Display.Text = "Context menu dismissed";
            }
        }

  

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

  效果图:

 

2、文本的ContextMenuOpening事件

Scenario2TextBox.ContextMenuOpening += new ContextMenuOpeningEventHandler(Scenario2TextBox_ContextMenuOpening);

        async void Scenario2TextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
        {
            // Create a menu and add commands specifying an id value for each instead of a delegate.
            var menu = new PopupMenu();
            menu.Commands.Add(new UICommand("Copy", null, 1));
            menu.Commands.Add(new UICommandSeparator());
            menu.Commands.Add(new UICommand("Highlight", null, 2));
            menu.Commands.Add(new UICommand("Look up on dictionary", null, 3));

            // We don't want to obscure content, so pass in a rectangle representing the sender of the context menu event.
            // We registered command callbacks; no need to await and handle context menu completion
            var chosenCommand = await menu.ShowForSelectionAsync(GetElementRect((FrameworkElement)sender));
            if (chosenCommand != null)
            {
                switch ((int)chosenCommand.Id)
                {
                    case 1:
                        Output2Text.Text = "'" + chosenCommand.Label + "'(" + chosenCommand.Id.ToString() + ") selected";
                        break;

                    case 2:
                        Output2Text.Text = "'" + chosenCommand.Label + "'(" + chosenCommand.Id.ToString() + ") selected";
                        break;

                    case 3:
                        Output2Text.Text = "'" + chosenCommand.Label + "'(" + chosenCommand.Id.ToString() + ") selected";
                        break;
                }
            }
            else
            {
                Output2Text.Text = "Context menu dismissed";
            }
        }

  效果图:

效果是右键文本框时,弹出菜单。如上图。