2016-06-07 17 views
0

Ich habe eine DataGrid und es hat eine DataGridCheckBox Spalte. Und ich brauche das Kontrollkästchen wie dies in allen Reihen von DataGrid zu präsentieren:DataGridCheckBoxColumn mit Text vor dem Kontrollkästchen

enter image description here

und finden Sie die XAML und entsprechenden Code, den ich habe:

<!--MainWindow.xaml--> 
<Window x:Class="DataGridColIssue.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Height="350" 
     Width="525" 
     Loaded="Window_Loaded"> 

    <Window.Resources> 
     <Style x:Key="RowNumberCheckBox" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}"> 
      <Setter Property="FlowDirection" Value="RightToLeft"/> 
      <Setter Property="VerticalAlignment" Value="Center"/> 
      <Setter Property="HorizontalAlignment" Value="Center"/> 
      <Setter Property="Content"> 
       <Setter.Value> 
        <Grid FlowDirection="LeftToRight"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="20"/> 
          <ColumnDefinition Width="5"/> 
         </Grid.ColumnDefinitions> 
         <TextBlock Grid.Column="0" Text="{Binding Number, StringFormat={}{0:00}}"/> 
        </Grid> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="HorizontalContentAlignment" Value="Center"/> 
      <Setter Property="VerticalContentAlignment" Value="Center"/> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="30"/> 
     </Grid.RowDefinitions> 
     <DataGrid Grid.Row="0" 
      Name="DataGridTesting" 
        AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridCheckBoxColumn Header="#" 
             Binding="{Binding Exclude, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" 
             ElementStyle="{StaticResource RowNumberCheckBox}" 
             EditingElementStyle="{StaticResource RowNumberCheckBox}"> 
       </DataGridCheckBoxColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
     <Button Grid.Row="1" 
       Name="AddItems" 
       Content="Add Item" 
       Click="AddItems_Click"/> 
    </Grid> 
</Window> 

-Code

//MainWindow.xaml.cs 
using System.Collections.Generic; 
using System.Windows; 

namespace DataGridColIssue 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public int CurrentOperation; 
     public List<Operation> Operations; 
     public MainWindow() 
     { 
      InitializeComponent(); 
      Operations = new List<Operation>(); 
      CurrentOperation = 0; 
     } 

     private void AddItems_Click(object sender, RoutedEventArgs e) 
     { 
      CurrentOperation++; 
      Operations.Add(new Operation(CurrentOperation)); 
      DataGridTesting.Items.Refresh(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      DataGridTesting.ItemsSource = Operations; 
      DataGridTesting.Items.Refresh(); 
     } 
    } 
} 

Betriebsklasse

Das Problem, das ich habe, ist nur die letzte Zeile hinzufügen wird mit dem Text vor dem CheckBox präsentiert und es sieht wie folgt aus:

enter image description here

Wie kann ich alle Zeilen bekommen die Nummer anzuzeigen, wie lange vor dem Kontrollkästchen?

Antwort

1

Grid-Instanz, die als Inhalt verwendet wird, wird von allen CheckBoxen gemeinsam verwendet. Aber es kann nicht mehr als ein Elternteil haben, daher wird es in der letzten CheckBox angezeigt.

ein korrekter Weg wäre, Content (modifiziertes Beispiel von dieser Frage: Text on the left side of checkbox in WPF?, Antwort von nmclean) zu setzen

<Style x:Key="RowNumberCheckBox" TargetType="CheckBox" 
     BasedOn="{StaticResource {x:Type CheckBox}}"> 
    <Setter Property="Content" Value="{Binding Number}"/> 
    <Setter Property="ContentStringFormat" Value="00"/> 
    <Setter Property="FlowDirection" Value="RightToLeft" /> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <ContentControl Content="{Binding}" 
           ContentStringFormat="{TemplateBinding ContentStringFormat}" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="HorizontalAlignment" Value="Center"/> 
    <Setter Property="VerticalAlignment" Value="Center"/> 
</Style> 

auch haben Sie bemerkt, dass Häkchen gekippt wird, wenn Flowdirection ist RightToLeft und CheckBox aktiviert ist?

Meine bevorzugte Lösung für die angegebene Anforderung wäre DataGridTemplateColumn anstelle von DataGridCheckBoxColumn oder eine benutzerdefinierte RowHeaderTemplate mit Text und CheckBox.

0

der Lösung durch @Ash vorgesehen Folgenden wird die Grid als Teil des ContentTemplate gemacht und dann die contentvalue, dies machte die Grid Instanz für jede Zeile erzeugt werden, hier ist die Lösung, die gewünschte Ergebnis erzeugt:

<Style x:Key="RowNumberCheckBox" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}"> 
     <Setter Property="FlowDirection" Value="RightToLeft"/> 
     <Setter Property="VerticalAlignment" Value="Center"/> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="Margin" Value="5"/> 
     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Grid FlowDirection="LeftToRight"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="20"/> 
          <ColumnDefinition Width="5"/> 
         </Grid.ColumnDefinitions> 
         <TextBlock Grid.Column="0" 
            Text="{Binding}" 
            HorizontalAlignment="Right"/> 
        </Grid> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Content" Value="{Binding Number}"/> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
    </Style> 

enter image description here

Verwandte Themen