2009-05-12 16 views
9

Ho una griglia WPF con molte righe e colonne, tutte contenenti elementi come TextBlocks e TextBoxes.Griglia WPF - Come applicare uno stile per una sola colonna?

Per questa situazione specifica voglio che tutto il materiale della colonna 1 abbia il padding e che tutto il materiale nella colonna 2 sia allineato correttamente. Sembra essere molto non-WPF dover impostare tali proprietà su ciascun elemento della griglia.

so di poter creare uno stile per tutti i TextBlocks all'interno di una griglia facendo qualcosa di simile a questo:

<Grid> 
    <Grid.Resources> 
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="HorizontalAlignment" Value="Right"/> 
    </Style> 
    </Grid.Resources> 
</Grid> 

Ma c'è un modo per applicare questo stile ai solo i controlli nel dire, colonna 2?

Devo utilizzare un controllo diverso?

+0

non è possibile con il controllo griglia nativo .. Forse potresti fare qualcosa del genere usando una proprietà personalizzata allegata –

risposta

17

Ecco cosa faccio di solito:

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}"> 
    <Style.Triggers> 
     <Trigger Property="Grid.Column" Value="0"> 
      <Setter Property="Margin" Value="0,0,2,0" /> 
     </Trigger> 

     <Trigger Property="Grid.Column" Value="2"> 
      <Setter Property="Margin" Value="20,0,2,0" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Questo è esattamente quello che stavo cercando! Bello ed elegante, perché non ci ho pensato :) –

0

È possibile definire alcuni stili come qui sotto e assegnarli alla vostra proprietà Column.ElementStyle:

<Window.Resources> 
     <Style x:Key="elementStyle" TargetType="TextBlock"> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
      <Setter Property="Margin" Value="2,0,2,0" /> 
     </Style> 

     <Style x:Key="rightElementStyle" BasedOn="{StaticResource elementStyle}" TargetType="TextBlock"> 
      <Setter Property="HorizontalAlignment" Value="Right" /> 
     </Style> 

     <Style x:Key="centerElementStyle" BasedOn="{StaticResource elementStyle}" TargetType="TextBlock"> 
      <Setter Property="HorizontalAlignment" Value="Center" /> 
     </Style> 
</Window.Resources> 

<dg:DataGrid AutoGenerateColumns="False"> 
     <dg:DataGrid.Columns> 
      <dg:DataGridTextColumn Binding={Binding Path=Name} 
            Header="Name" 
            ElementStyle="{StaticResource centerElementStyle}"/> 
      <dg:DataGridTextColumn Binding={Binding Path=Amount} 
            Header="Amount" 
            ElementStyle="{StaticResource rightElementStyle}"/> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 
+0

È solo per DataGrid? Non riesco a vedere come applicarlo a una griglia. –

+0

È possibile assegnare lo stile a ciascuna colonna. Vedi il codice modificato. – sacha

+0

Stavo cercando come farlo con una Grid standard, ma darò un'occhiata a DataGrid e vedrò se posso usare questo invece. –

Problemi correlati