Контекстное меню выбранного пункта wp7 - PullRequest
1 голос
/ 28 июля 2011

У меня есть список.У каждого элемента есть контекстное меню. Если я просто удерживаю элемент и работаю с ним, он не выделен, и я получаю сообщение об ошибке. Если я выбираю первый элемент и чем занимаюсь, все в порядке. Как выбрать элемент при жесте удержания?

              <DataTemplate>
                <Grid Margin="0,5">
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                  </Grid.ColumnDefinitions>
                  <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu IsEnabled="{Binding uid, Converter={StaticResource CanDelete}}"  IsZoomEnabled="True" x:Name="databoundMenu">
                      <toolkit:MenuItem Header="Удалить"  Click="deleteComment"/>
                    </toolkit:ContextMenu>
                  </toolkit:ContextMenuService.ContextMenu>
.....
                </Grid>
              </DataTemplate>

c #

var it = this.comm_box.SelectedItem as Comments;

Ответы [ 2 ]

1 голос
/ 04 января 2012

Вам нужно пройти вверх по VisualTree, чтобы получить FrameworkELement в ListBox.Это должно быть сделано в вашем обработчике кликов.

private void deleteComment(object sender, RoutedEventArgs e)
{
    var menuItem = sender as MenuItem;
    var fe =VisualTreeHelper.GetParent(menuItem) as FrameworkElement;
    var comment = fe.DataContext as Comments;
    // deleteComment

}
1 голос
/ 28 июля 2011

ContextMenuService по очевидным причинам не вызывает событие SelectionChanged и не устанавливает SelectedItem, поскольку это будет означать, что ContextMenus с такими параметрами, как «Удалить», будет с ошибкой.

Что я думаю, ваша проблема в том, что вы не проверяете, установлен ли SelectedItem на самом деле, прежде чем приступить к работе над ним.

Вместо этого вы должны проверить, что SelectedItem не является нулевым, прежде чем выполнять какую-либо работу с ним.

...