2017-08-21 2 views
0

Ich habe ein Datagrid, wo ich Werte über den Anfang und das Ende eines Zeitraums zeigen. Dafür habe ich eine Spaltenvorlage mit 2 Textblöcken erstellt, aber in der letzten Zeile zeige ich einen Unterschied zwischen diesen Werten als Prozentsatz. Was ich tun möchte, ist, den ersten Textblock in der letzten Reihe zu zentrieren, da ich nur einen Wert in dieser Reihe habe.WPF C# Datagrid ändern letzten Zeilenlayout

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.Header> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="10"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Officer11Nome}" 
         HorizontalAlignment="Center" 
         Grid.Column="0" 
         Grid.Row="0" 
         Grid.ColumnSpan="3" 
         /> 
      <TextBlock Text="Abertura" 
         HorizontalAlignment="Center" 
         Grid.Column="0" 
         Grid.Row="1" 
         /> 

      <TextBlock Text="Fechamento" 
         HorizontalAlignment="Center" 
         Grid.Column="2" 
         Grid.Row="1" 
         /> 
     </Grid> 
    </DataGridTemplateColumn.Header> 

    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="10"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Text="{Binding Officer1Abertura}" Margin="2,0,2,0" TextAlignment="Left" Grid.Column="0"/> 
       <TextBlock Text="{Binding Officer1Fechamento}" Margin="2,0,2,0" TextAlignment="Right" Grid.Column="2"/> 
      </Grid> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Danke.

+0

die sind Workarounds für Dinge zu tun. Sie können Auslöser verwenden. Die am häufigsten verwendete Technik ist DatatemplateSelector – Ramankingdom

Antwort

1

Dies ist Abhilfe mit Trigger spielen (1) dritte Eigenschaft erstellen. Wenn es gezeigt wird, werden die anderen zwei nicht gezeigt. Halten Sie es bis zur Zeit, die es nicht berechnet wird, null. vorläufig nenne ich es als differencofvalues. Geben Sie den entsprechenden Namen und Bindung

<DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Name="textbox1" Text="{Binding Officer1Abertura}" Margin="2,0,0,0" TextAlignment="Center" Width="Auto" /> 
        <TextBlock Text="{Binding differenceOfValues}" Margin="0,0,0,0" TextAlignment="Center" Width="Auto"> 
         <TextBlock.Style> 
          <Style TargetType="{x:Type TextBlock}"> 
           <Setter Property="Visibility" Value="Visible"/> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding differenceOfValues}" Value="{x:Null}"> 
             <Setter Property="Visibility" Value="Collapsed"></Setter> 
             <Setter Property="{Binding ElementName=textbox1, Path=Visibility}" Value="Visible"></Setter> 
             <Setter Property="{Binding ElementName=textbox2, Path=Visibility}" Value="Visible"></Setter> 
            </DataTrigger> 
            <Trigger Property="Visibility" Value="Visible"> 
             <Setter Property="{Binding ElementName=textbox1, Path=Visibility}" Value="Collapsed"></Setter> 
             <Setter Property="{Binding ElementName=textbox2, Path=Visibility}" Value="Collapsed"></Setter> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </TextBlock.Style> 
        </TextBlock> 
        <TextBlock Name="textbox2" Text="{Binding Officer1Fechamento}" Margin="10,0,2,0" TextAlignment="Center" Width="Auto" Visibility="Collapsed" /> 
       </StackPanel> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
0

Ich erstellte eine andere Eigenschaft mit den Konfigurationen, die ich brauchte. Da ich keine Werte in den anderen Eigenschaften habe, passt es gut.

<TextBlock Text="{Binding Officer1Percentagem}" TextAlignment="Center" Grid.Column="0" Grid.ColumnSpan="3"/> 
<TextBlock Text="{Binding Officer1Abertura}" TextAlignment="Right" Grid.Column="0"/> 
<TextBlock Text="{Binding Officer1Fechamento}" TextAlignment="Right" Grid.Column="2"/>