2011-07-28 177 views
1

我有一個ListBox。每個項目都有上下文菜單。如果我只是堅持項目,並使用它,它沒有被選中,我得到錯誤。如果我爲第一個選擇項目,而不是工作,一切都ok。如何我可以選擇保持手勢項目?上下文菜單選定項wp7

   <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; 

回答

1

的ContextMenuService出於顯而易見的原因,沒有調用SelectionChanged事件,並沒有設置的SelectedItem,因爲這將意味着ContextMenus與選項,如「刪除」會出錯。

什麼我認爲是你的問題是,你沒有檢查SelectedItem是否實際設置,在做它的工作之前。

相反,您應該在使用它之前驗證SelectedItem不爲null。

+0

'如果(它== NULL) 回報;' 但是,如果用戶不選擇任何項目,只有堅持一下吧,總項目空 – SevenDays

+0

是的,這應該是預期的行爲?使用長按打開一個上下文菜單不應該選擇該項目。這是一個常規的水龍頭。 –

1

你需要沿着VisualTree去列表框中的FrameworkELement。這應該在你的點擊處理程序中完成。

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 

} 
+0

這工作,我驗證了它。 – terphi

+0

爲什麼要投票?這對我有用!我會把它調平到雅。 –

相關問題