Кнопка "Выбрать все" WPF DataGrid
Мне было интересно, если в любом случае отключить выбор всех опций в верхнем углу WPF DataGrid... это похоже на то, что я добавляю UserControl к фиксированному документу в WPF.
Спасибо заранее,
U.
Ответы
Ответ 1
После использования Snoop для анализа визуального дерева тестового приложения, которое я собрал, я придумал это решение, используя событие DataGrid_Loaded ):
private void TheGrid_Loaded(object sender, RoutedEventArgs e) {
var dataGrid = (DataGrid)sender;
var border = (Border)VisualTreeHelper.GetChild(dataGrid, 0);
var scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
var grid = (Grid)VisualTreeHelper.GetChild(scrollViewer, 0);
var button = (Button)VisualTreeHelper.GetChild(grid, 0);
button.IsEnabled = false;
}
Там может быть более элегантное решение XAML, но это то, что пришло в голову во-первых, и кажется, что он работает достаточно хорошо (я тоже не делаю никаких операций с Exception).
Примечание. Я не играл с отключением/повторным включением DataGrid, чтобы убедиться, что кнопка select all остается отключена. Если он не остается отключенным, вы можете также подключиться к событию DataGrid_IsEnabledChanged.
Надеюсь, это поможет!
Ответ 2
В DataGrid
есть свойство HeadersVisibility
. Он имеет четыре значения - All
, Column
, Row
, None
.
С помощью HeadersVisibility = All
вы получите кнопку SelectAll.
С HeadersVisibility = Column
вы получите только столбцы. Не выберите SelectAll или Row Headers, чтобы выбрать полную строку.
С помощью HeadersVisibility = Row
вы получите только заголовки строк, чтобы выбрать целую строку. Не кнопка SelectAll или столбцы.
С HeadersVisibility = None
вы ничего не получите. Все заголовки будут скрыты.
Надеюсь, это поможет вам.
Ответ 3
Добавьте команду в команду SelectAll и верните false в CanExecute, чтобы отключить кнопку selectall.
см.: Событие для выбора всех: WPF Datagrid
Ответ 4
Я бы изменил Control Templat
e DataGrid.
Необходимо отключить эту кнопку внутри шаблона.
Это DataGrid
ControlTemplate
:
<ControlTemplate TargetType="{x:Type DataGrid}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="True">
<ScrollViewer x:Name="DG_ScrollViewer"
Focusable="false">
<ScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button Command="{x:Static DataGrid.SelectAllCommand}"
Focusable="false"
Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"
Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter"
Grid.Column="1"
Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
CanContentScroll="{TemplateBinding CanContentScroll}"
Grid.ColumnSpan="2"
Grid.Row="1" />
<ScrollBar x:Name="PART_VerticalScrollBar"
Grid.Column="2"
Maximum="{TemplateBinding ScrollableHeight}"
Orientation="Vertical"
Grid.Row="1"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportHeight}" />
<Grid Grid.Column="1"
Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ScrollBar x:Name="PART_HorizontalScrollBar"
Grid.Column="1"
Maximum="{TemplateBinding ScrollableWidth}"
Orientation="Horizontal"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportWidth}" />
</Grid>
</Grid>
</ControlTemplate>
</ScrollViewer.Template>
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</ScrollViewer>
</Border>
</ControlTemplate>
Отключите кнопку вручную и назначьте это ControlTemplate
вашему DataGrid
.