2009-05-12 4 views
9

J'ai une grille WPF avec beaucoup de lignes et de colonnes, toutes contenant des choses comme TextBlocks et TextBoxes.WPF Grid - Comment appliquer un style pour une seule colonne?

Pour cette situation spécifique, je veux que tous les éléments de la colonne 1 aient un remplissage, et tous les éléments de la colonne 2 soient alignés à droite. Il semble être très non-WPF d'avoir à définir ces propriétés sur chaque élément de la grille.

Je sais que je peux créer un style pour tous TextBlocks dans une grille en faisant quelque chose comme ceci:

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

Mais est-il un moyen d'appliquer ce style aux seuls contrôles par exemple, la colonne 2?

Dois-je utiliser un autre contrôle?

+0

Il est impossible avec le contrôle de la grille native .. Peut-être que vous pourriez faire quelque chose comme ça en utilisant une propriété attachée personnalisée –

Répondre

17

Voici ce que je fais habituellement:

<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

C'est exactement ce que je cherchais! Agréable et élégant aussi, pourquoi je n'y ai pas pensé :) –

0

Vous pouvez définir des styles comme ci-dessous et de les attribuer à votre propriété 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

Est-ce seulement pour DataGrid? Je ne vois pas comment appliquer cela à une grille. –

+0

Vous pouvez attribuer le style à chaque colonne. Voir le code édité. – sacha

+0

Je cherchais comment faire cela avec une grille standard, mais je vais jeter un oeil à DataGrid et voir si je peux l'utiliser à la place. –

Questions connexes