2010-05-12 67 views
13

我想知道是否有禁用WPF DataGrid的顶部角落选择所有选项....这似乎只有当我将用户控件添加到WPF中的fixeddocument时发生。全选按钮WPF DataGrid

由于提前,

U.

+0

我不确定禁用它,但我发现隐藏你的RowHeaders会隐藏它。 (对我造成问题是因为我想隐藏RowHeaders但显示SelectAll按钮) – Rachel 2010-11-19 16:35:16

回答

6

使用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唯一的解决方案,但这是首先想到的,它似乎工作得很好(我显然没有做任何异常处理)。

注意:我还没有玩过禁用/重新启用DataGrid以确保全选按钮停留停用。如果它不保持禁用状态,那么您可能还想挂钩DataGrid_IsEnabledChanged事件。

希望这有助于!

+2

这是一个糟糕的解决方案,很容易在xaml构造中修改。如果您只想禁用按钮,请按照Eben的建议使用绑定命令,或者如果您想隐藏按钮,则按Varun的建议禁用显示。 – TheRoadrunner 2014-10-28 08:50:23

27

DataGrid有一个属性HeadersVisibility。它有四个值 - All,Column,,None

随着HeadersVisibility = All,你会得到SelectAll按钮。

HeadersVisibility = Column,你将只获得列。不是SelectAll按钮或行标题来选择一个完整的行。

随着HeadersVisibility = Row,你将只获得行头选择整行。不是SelectAll按钮或列。

HeadersVisibility = None,你什么也得不到。所有标题将被隐藏。

我希望这可以帮助你。

0

我会改变Control TemplatËDataGrid中的。 需要在模板内禁用此按钮。 这是DataGridControlTemplate

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

它手动禁用按钮,并指定这个ControlTemplateDataGrid