Скрыть пустое контекстное меню - PullRequest
3 голосов
/ 05 марта 2012

У меня есть контекстное меню в wp7

<toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu x:Name="onHoldContextMenu">
        <toolkit:MenuItem Header="Delete" Tag="{Binding}" Click="DeleteVisitorNote_Click" Visibility="{Binding DeleteContextVisibility, Converter={StaticResource BooleanToVisibilityConverter}}"/>
        <toolkit:MenuItem Header="View" Tag="{Binding}" Visibility="{Binding ViewContextVisibility, Converter={StaticResource BooleanToVisibilityConverter}}" Click="ViewVisitorContact_Click"/>
    </toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>

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

<toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu x:Name="onHoldContextMenu"  Visibility="{Binding ContextVisibility, Converter={StaticResource BooleanToVisibilityConverter}}">
        <toolkit:MenuItem Header="Delete" Tag="{Binding}" Click="DeleteVisitorNote_Click" Visibility="{Binding DeleteContextVisibility, Converter={StaticResource BooleanToVisibilityConverter}}"/>
        <toolkit:MenuItem Header="View" Tag="{Binding}" Visibility="{Binding ViewContextVisibility, Converter={StaticResource BooleanToVisibilityConverter}}" Click="ViewVisitorContact_Click"/>
    </toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>

Но в этом случае я получаю исключение nullrefference ...

Как скрыть контекстное меню, когда оно пустое?

1 Ответ

6 голосов
/ 07 марта 2012

Я нашел это решение на другом форуме.

        <ListBox.ItemTemplate> 
                <DataTemplate> 
                    <Grid Hold="Grid_Hold"> 
                        <toolkit:ContextMenuService.ContextMenu> 
                            ... context menu items ... 
                        </toolkit:ContextMenuService.ContextMenu> 

                        ... listbox item contents ... 

                    </Grid> 
                </DataTemplate> 
            </ListBox.ItemTemplate> 

    private void Grid_Hold(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
        ItemViewModel listitem = (sender as FrameworkElement).DataContext as ItemViewModel; 
        e.Handled = listitem.DisableContextMenu(); 
    } 

Установка e.Handled = true блокирует ContextMenu от получения события Hold.В вашей модели представления вы бы реализовали какое-либо свойство или метод, которые возвращают, отображать ли ContextMenu.

...