WPF Datagrid кнопка “Select All” - “Отменяют выбор Все” также?

Это - плохое использование, если Вы идете Строгие.

<br/> и <hr/> не часть содержания. Например, эти <hr/> является наиболее часто используемым для разделения блоков текста. Но не возможно к этому с нижней частью границы? И <br/> рассматривается во многих случаях как способ ограничить текст определенной формой, которая не могла быть выполнена с css?

, Конечно, Вы не идете Строгие, не волнуются к очень.

10
задан svick 21 November 2012 в 17:33
поделиться

1 ответ

Хорошо, после долгих поисков я узнал, как добраться до кнопки, от Колина Эберхарда, здесь:

Стилизация труднодоступных элементов в шаблонах управления с прикрепленными поведениями

Затем я расширил метод «Grid_Loaded» в его классе, добавив обработчик событий к кнопке, но не забудьте сначала удалить команду «Выбрать все» по умолчанию (в противном случае после запуска добавленного нами обработчика событий команда запускается) .

/// <summary>
/// Handles the DataGrid's Loaded event.
/// </summary>
/// <param name="sender">Sender object.</param>
/// <param name="e">Event args.</param>
private static void Grid_Loaded(object sender, RoutedEventArgs e)
{
    DataGrid grid = sender as DataGrid;
    DependencyObject dep = grid;

    // Navigate down the visual tree to the button
    while (!(dep is Button))
    {
        dep = VisualTreeHelper.GetChild(dep, 0);
    }

    Button button = dep as Button;

    // apply our new template
    ControlTemplate template = GetSelectAllButtonTemplate(grid);
    button.Template = template;
    button.Command = null;
    button.Click += new RoutedEventHandler(SelectAllClicked);
}

/// <summary>
/// Handles the DataGrid's select all button's click event.
/// </summary>
/// <param name="sender">Sender object.</param>
/// <param name="e">Event args.</param>
private static void SelectAllClicked(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    DependencyObject dep = button;

    // Navigate up the visual tree to the grid
    while (!(dep is DataGrid))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }

    DataGrid grid = dep as DataGrid;

    if (grid.SelectedItems.Count < grid.Items.Count)
    {
        grid.SelectAll();
    }
    else
    {
        grid.UnselectAll();
    }

    e.Handled = true;
}

По сути, если какие-либо строки не выделены, он «выбирает все», в противном случае - «отменяет выбор всех». Это работает почти так же, как вы ожидаете, что все сработает select / unselect all, я не могу поверить, что они не заставляли команду делать это по умолчанию, если честно, может быть, в следующем выпуске.

Надеюсь, это все равно кому-то поможет. , Привет, Уилл

12
ответ дан 3 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: