2010-12-21 1 views

Antwort

2

Interessanterweise ist dieser Teil des DataGrids Niemandsland - es hat nicht einmal einen offiziellen Namen, geschweige denn ein Verhalten oder eine Vorlage. Informationen zu Ereignissen in diesem Bereich finden Sie unter here oder here.

0

In mindestens einem Beispiel habe ich festgestellt, dass durch Klicken auf das graue Dreieck in der Ecke alle Zeilen ausgewählt werden.

Aber das ist keine integrierte Funktion dieser Steuerung, soweit ich weiß. Es ist Teil einer benutzerdefinierten Vorlage.

dieses Beispiel Siehe: http://www.dotnetspark.com/kb/2941-styling-wpf-datagrid.aspx

Wenn Sie das Beispiel herunterladen und die Ressourcen/DataGridCustomization.xaml Datei für „SelectAll“ suchen, werden Sie den Teil der Vorlage finden, der diese Funktion enthält.

1

Ich nenne es die Schaltfläche "Alle auswählen". Es hat jedoch keinen offiziellen Namen. Es werden auch keine Stileigenschaften angezeigt. Für eine einfache Methode, um es über angefügten Eigenschaften, Stil, finden Sie unter:

http://www.scottlogic.co.uk/blog/colin/2009/02/styling-hard-to-reach-elements-in-control-templates-with-attached-behaviours/

Colin E.

+0

+1 für den Link, sehr hilfreich. Ich hatte fast genau das selbe getan wie in diesem Post, um diesen verdammten Knopf zu stylen, da ich zu der Zeit nichts hilfreiches gefunden hatte. Es ist wirklich ärgerlich, dass MS es nicht störte, es zu benennen .... – David

1

Wie andere gesagt haben, ist es die "Select All" Button. Wenn Sie darauf klicken, wird alles im DataGrid ausgewählt, wenn SelectionMode auf Extended gesetzt ist.

Die Schaltfläche "Alle auswählen" ist Teil der DataGrid-Vorlage. Oder tatsächlich, es ist Teil der ScrollViewer-Vorlage, die Teil der DataGrid-Vorlage ist, so dass es ziemlich tief verschachtelt ist. Das ControlTemplate sieht so aus. Von hier aus können Sie tun, was Sie mit dem SelectAll Knopf möchten, deaktivieren Sie es, ändern Sie den Hintergrund usw.

<Style TargetType="{x:Type DataGrid}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <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> 

            <!-- Here it is --> 
            <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> 
     </Setter.Value> 
    </Setter> 
</Style> 
1

Wenn Sie die selectAll Taste deaktivieren möchten, können Sie auch tun, wie folgt:

//Disable select all button 
    datagrid.CommandBindings.Add(new CommandBinding(DataGrid.SelectAllCommand, delegate { }, (s, a) => { if (a.OriginalSource is Button) ((Button)a.OriginalSource).IsEnabled = false; })); 

als Workaround. Dies kann auch verwendet werden, um andere Dinge zu verkabeln.

Das „Problem“ mit Re-Templat ist, dass Sie alle Themen Rechnung zu tragen haben ... langweilig :)

+0

+1! Das ist ein sehr cooler "Trick"! Werde mich daran erinnern –