2009-05-12 19 views
9

Mam siatki WPF z wieloma wierszami i kolumnami, wszystkie zawierające rzeczy takie jak TextBlocks i TextBoxes.Siatka WPF - jak zastosować styl tylko dla jednej kolumny?

W tej konkretnej sytuacji chcę, aby wszystkie elementy w kolumnie 1 miały dopełnienie, a wszystkie elementy w kolumnie 2 mają być wyrównane w prawo. Wydaje się, że bardzo nie jest to WPF, aby ustawić te właściwości dla każdego elementu w siatce.

wiem, że mogę utworzyć styl dla wszystkich TextBlocks w siatce robiąc coś takiego:

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

Ale czy jest jakiś sposób, aby zastosować ten styl tylko do kontroli w powiedzmy, kolumna 2?

Czy powinienem używać innej kontrolki?

+0

To nie jest możliwe z natywnym Grid Control .. Być może mógłbyś zrobić coś takiego używając niestandardowej, dołączonej właściwości –

Odpowiedz

17

Oto, co zwykle zrobić:

<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

Tego właśnie szukałem! Ładnie i elegancko też, dlaczego nie pomyślałem o tym :) –

0

Można zdefiniować kilka stylów jak poniżej i przypisać je do swojej własności 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

Czy jest to tylko dla DataGrid? Nie widzę, jak zastosować to do siatki. –

+0

Możesz przypisać styl do każdej kolumny. Zobacz edytowany kod. – sacha

+0

Szukałem, jak to zrobić ze standardową siatką, ale zajrzę do DataGrid i zobaczę, czy mogę zamiast tego użyć tego. –

Powiązane problemy