2

我正在開發一個Silverlight 4應用程序,並希望實現一個看似簡單的任務: 我有這樣的DataGrid:Silverlight的DataGrid中:文本菜單工具包在整個行

<sdk:DataGrid x:Name="dg" Grid.Row="1" Grid.ColumnSpan="2" Width="800" ItemsSource="{Binding SearchResults}" AutoGenerateColumns="False" > 
        <sdk:DataGrid.Columns> 
         <sdk:DataGridTemplateColumn SortMemberPath="Name" Header="Name" CellTemplate="{StaticResource SearchGridNameFieldtemplate}"> 

         </sdk:DataGridTemplateColumn> 
         <sdk:DataGridTemplateColumn SortMemberPath="samAccountName" Header="Kontoname" CellTemplate="{StaticResource SearchGridAccountNameFieldtemplate}"> 

         </sdk:DataGridTemplateColumn> 

         <sdk:DataGridTextColumn Header="Description" 
      Binding="{Binding Principal.Description}" /> 
         <sdk:DataGridTextColumn Header="Container" 
      Binding="{Binding Principal.ContainerDN}" /> 

        </sdk:DataGrid.Columns> 
       </sdk:DataGrid> 

現在我使用一個DataTemplate的TemplateColumn中它採用了工具包的ContextMenu這樣

<DataTemplate x:Key="DirectoryUserSearchItemViewModel" > 
            <StackPanel Orientation="Horizontal"> 
             <controlsInputToolkit:ContextMenuService.ContextMenu> 
              <controlsInputToolkit:ContextMenu> 
               <controlsInputToolkit:MenuItem Header="Eigenschaften" Command="{Binding EditItem}" Visibility="{Binding User.DistinguishedName, Converter={StaticResource UserPermissionVisibilityConverter},ConverterParameter=1;8}" CommandParameter="{Binding User}"> 
                <controlsInputToolkit:MenuItem.Icon> 
                 <Rectangle Width="16" Height="16" Fill="{StaticResource MoveUpBrush}"/> 
                </controlsInputToolkit:MenuItem.Icon> 
               </controlsInputToolkit:MenuItem> 
               <controlsInputToolkit:MenuItem Header="User endgültig löschen" Command="{Binding HardDeleteAccount}" Visibility="{Binding HardDeleteCommandVisibility}" CommandParameter="{Binding User}"> 
                <controlsInputToolkit:MenuItem.Icon> 
                 <Rectangle Width="16" Height="16" Fill="{StaticResource MoveUpBrush}"/> 
                </controlsInputToolkit:MenuItem.Icon> 
               </controlsInputToolkit:MenuItem> 
               <controlsInputToolkit:MenuItem Header="Externe Anwendung ausführen" Command="{Binding ExecuteExternalApplication}" CommandParameter="{Binding User}"> 
                <controlsInputToolkit:MenuItem.Icon> 
                 <Rectangle Width="16" Height="16" Fill="{StaticResource MoveUpBrush}"/> 
                </controlsInputToolkit:MenuItem.Icon> 
               </controlsInputToolkit:MenuItem> 
              </controlsInputToolkit:ContextMenu> 
             </controlsInputToolkit:ContextMenuService.ContextMenu> 
             <TextBlock Text="{Binding Principal.Name}"/> 
            </StackPanel> 
           </DataTemplate> 

這裏是最有趣的部分:難道我真的有複製粘貼在我的網格整個上下文菜單DataTemplate中的每一列,如果我希望能夠到右行的任意位置單擊和激活上下文米ENU?我不能設置此爲一整行?在計算器didnt其他帖子似乎給了一個答案,這個特定的問題。

回答

1

在災後https://stackoverflow.com/a/8795056/451495 recomended您可以使用下面:

public partial class Page1 : UserControl 
{ 
    public Page1() 
    { 
     InitializeComponent(); 
     Loaded += OnLoaded; 
     Grid1.LoadingRow += Grid1OnLoadingRow; 
    } 

    private void Grid1OnLoadingRow(object sender, DataGridRowEventArgs e) 
    { 
     var contextMenu = new ContextMenu(); 
     var deleteMenuItem = new System.Windows.Controls.MenuItem { Header = "text" }; 
     contextMenu.Items.Add(deleteMenuItem); 
     ContextMenuService.SetContextMenu(e.Row, contextMenu); 
    } 
} 
+1

只是一個謹慎的話,如果你這樣做,你可能會想脫離在「UnloadingRow」上下文菜單,以防止內存泄漏。 – McGarnagle