ContextMenu на кране вместо нажатия и удержания - PullRequest
12 голосов
/ 06 февраля 2011

Мне нужно открыть меню, и поскольку WP7 not designed для выполнения таких действий, я пользуюсь Toolkit.Ниже приведен пример кода:

<Border BorderThickness="3" Padding="6">
     <toolkit:ContextMenuService.ContextMenu>
         <toolkit:ContextMenu>
             <toolkit:MenuItem Header="item1" Click="Item1_Click" />
             <toolkit:MenuItem Header="item2" Click="Item2_Click" />
             <toolkit:MenuItem Header="item3" Click="Item3_Click" />
         </toolkit:ContextMenu>
     </toolkit:ContextMenuService.ContextMenu>
     <TextBlock Text="Tap" />
</Border>

Теперь это работает нормально, пока пользователь нажимает и удерживает действие.Но я не могу попросить пользователя о таких действиях.Мне нужно отображать меню одним нажатием / касанием / касанием / жестом (как хотите, чтобы оно называлось).Может кто-нибудь предложить, пожалуйста?Если вы считаете, что инструментарий - не лучший способ, предложите альтернативные варианты с примером кода.Я попытался всплывающее окно, но это принесло больше вреда, чем пользы для моего приложения

Ответы [ 2 ]

14 голосов
/ 06 февраля 2011

Вы можете добавить GestureListener к Border и подписаться на событие Tap. В обработчике событий вы получите ContextMenu для Border и установите для IsOpen значение true, если у него нет логического родителя.

<Border BorderThickness="3" Padding="6">
    <toolkit:GestureService.GestureListener>
        <toolkit:GestureListener Tap="GestureListener_Tap" />
    </toolkit:GestureService.GestureListener>
    <toolkit:ContextMenuService.ContextMenu>
        <toolkit:ContextMenu>
            <toolkit:MenuItem Header="item1" Click="Item1_Click" />
            <toolkit:MenuItem Header="item2" Click="Item2_Click" />
            <toolkit:MenuItem Header="item3" Click="Item3_Click" />
        </toolkit:ContextMenu>
    </toolkit:ContextMenuService.ContextMenu>
    <TextBlock Text="Tap" />
</Border>

private void GestureListener_Tap(object sender, GestureEventArgs e)
{
    Border border = sender as Border;
    ContextMenu contextMenu = ContextMenuService.GetContextMenu(border);
    if (contextMenu.Parent == null)
    {
        contextMenu.IsOpen = true;
    }
}
0 голосов
/ 06 февраля 2011

Если вам необходимо контекстное меню для вашего приложения, то ContextMenu и ContextMenuService - лучший подход, поскольку он является стандартным для сторонних и предварительно установленных приложений.Пользователи уже понимают жест «нажми и удерживай», поэтому обходить его будет нелогично.

Если (по какой-либо причине) вы должны инициировать ContextMenu с одного нажатия, то вы можетевсегда настраивайте исходный код для ContextMenu.cs из набора инструментов Silverlight, чтобы вместо перехвата события Hold он перехватывал событие Tap.

...