Отображение ContextMenu - PullRequest
       2

Отображение ContextMenu

4 голосов
/ 19 декабря 2010

Мне трудно найти хорошую документацию для этого, несмотря на то, что я некоторое время искал.

Мне бы хотелось иметь контекстное меню в моем приложении, которое бы копировало поведение, наблюдаемое при других касаниях и удерживанииконтекстные меню, такие как закрепление приложения на начальном экране из списка приложений.

Вот мое контекстное меню:

                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu x:Name="sectionContextMenu">
                        <toolkit:MenuItem Header="Hide this section from this list" />
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>

Как мне его показать?

Ответы [ 2 ]

7 голосов
/ 19 декабря 2010

Необходимо присоединить контекстное меню к элементу, который пользователь хочет нажать и удерживать.

<Border Margin="0,12" BorderBrush="{StaticResource PhoneForegroundBrush}" BorderThickness="2" Background="Transparent" VerticalAlignment="Center" Padding="16">
   <toolkit:ContextMenuService.ContextMenu>
      <toolkit:ContextMenu x:Name="sectionContextMenu">
         <toolkit:MenuItem Header="Hide this section from this list" />
      </toolkit:ContextMenu>
   </toolkit:ContextMenuService.ContextMenu>
   <TextBlock Text="Tap and hold here to invoke a ContextMenu" Style="{StaticResource PhoneTextNormalStyle}"/>
</Border>

Теперь пользователь может вызвать контекстное меню, нажав и удерживая его содержимое.Border элемент.

2 голосов
/ 30 октября 2012

Уникальное контекстное меню для разных элементов в зависимости от содержимого.

private ContextMenu CreateContextMenu(ListBoxItem lbi)
{
    ContextMenu contextMenu = new ContextMenu();
    ContextMenuService.SetContextMenu(lbi, contextMenu);
    contextMenu.Padding = new Thickness(0);

    string item_1 = "item 1";
    if(lbi.Content is string) {
        item_1 = lbi.Content as string;
    }
    contextMenu.ItemsSource = new List<string> { item_1, "item 2", "item 3" };
    contextMenu.IsOpen = true;
    return contextMenu;
}

private void Results_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (Results.SelectedIndex == -1) return;
    int index = Results.SelectedIndex;

    ListBoxItem lbi = Results.ItemContainerGenerator.ContainerFromIndex(index) as ListBoxItem;

    CreateContextMenu(lbi);
    Results.SelectedIndex = -1;
}
...