2010-05-12 71 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