Silverlight DataGrid: набор инструментов ContextMenu для всей строки - PullRequest
2 голосов
/ 11 октября 2011

Я занимаюсь разработкой приложения Silverlight 4 и хочу решить, казалось бы, легкую задачу: У меня есть эта 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>

Вот самое интересное: действительно ли мне нужно скопировать и вставить всю таблицу данных контекстного меню с табличкой FOR EACH в моей сетке, если я хочу иметь возможность щелкнуть правой кнопкой мыши в любом месте строки и активировать контекстное меню? Не могу ли я установить это для всего ряда? Другие сообщения о stackoverflow, похоже, не дают ответа на эту конкретную проблему.

Ответы [ 2 ]

1 голос
/ 05 июня 2012

Как рекомендуется в посте https://stackoverflow.com/a/8795056/451495 Вы можете использовать следующее:

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 голос
/ 27 октября 2011

Вы можете попробовать добавить имена столбцов, а затем вызвать ContextMenuService.SetContextMenu, чтобы добавить ContextMenu в другие столбцы.

Следующая задача - определить, по какому столбцу был щелкнуть правой кнопкой мыши.

Похожие записи:
Как получить Владелец ContextMenu (из набора инструментов Silverlight 4)?
Silverlight Toolkit ContextMenu: Какой элемент управления был щелкнут правой кнопкой мыши?

...