Metro style App ContextMenu Summary
Metro style App ContextMenu Summary。
Fist let us see the effect pictures。
Picture 1.
Picture 2.
Get the frameworkElement Rect。
public static 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));
} |
Next is a image righttap event。
private async void AttachmentImage_RightTapped( object sender, RightTappedRoutedEventArgs e)
{ var menu = new PopupMenu();
menu.Commands.Add( new UICommand( "Open with" , (command) =>
{
//ToDo:function
}));
menu.Commands.Add( new UICommand( "Save attachment" , (command) =>
{
//ToDo:function
}));
var chosenCommand = await menu.ShowForSelectionAsync(GetElementRect((FrameworkElement)sender));
if (chosenCommand == null )
{
// The command is null if no command was invoked.
//ToDo:function
}
} |
2.Another sample
returns a rect for selected text
// returns a rect for selected text private Rect GetTextboxSelectionRect(TextBox textbox)
{ Rect rectFirst, rectLast;
if (textbox.SelectionStart == textbox.Text.Length)
{
rectFirst = textbox.GetRectFromCharacterIndex(textbox.SelectionStart - 1, true );
}
else
{
rectFirst = textbox.GetRectFromCharacterIndex(textbox.SelectionStart, false );
}
int lastIndex = textbox.SelectionStart + textbox.SelectionLength;
if (lastIndex == textbox.Text.Length)
{
rectLast = textbox.GetRectFromCharacterIndex(lastIndex - 1, true );
}
else
{
rectLast = textbox.GetRectFromCharacterIndex(lastIndex, false );
}
GeneralTransform buttonTransform = textbox.TransformToVisual( null );
Point point = buttonTransform.TransformPoint( new Point());
return new Rect(point.X + rectFirst.Left,
point.Y + rectFirst.Top,
rectLast.Right - rectFirst.Left,
rectLast.Bottom - rectFirst.Top);
} |
Next is a TextBox ContextMenuOpening event.
private async void ReadOnlyTextBox_ContextMenuOpening( object sender, ContextMenuEventArgs e)
{ e.Handled = true ;
TextBox textbox = (TextBox)sender;
if (textbox.SelectionLength > 0)
{
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" , null , 3));
Rect rect = GetTextboxSelectionRect(textbox);
var chosenCommand = await menu.ShowForSelectionAsync(rect);
if (chosenCommand != null )
{
switch (( int )chosenCommand.Id)
{
case 1:
//Next is copy function
String selectedText = ((TextBox)sender).SelectedText;
var dataPackage = new DataPackage();
dataPackage.SetText(selectedText);
Clipboard.SetContent(dataPackage);
break ;
case 2:
//Todo:function
break ;
case 3:
//Todo:function
break ;
}
}
else
{
//Todo:function
}
}
else
{
//Todo:function
}
} |
The source sample is from msdn.
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/08/01/2618865.html,如需转载请自行联系原作者