2009-05-12 2 views
9

У меня есть WPF-сетка со многими строками и столбцами, содержащая такие вещи, как TextBlocks и TextBoxes.WPF Grid - Как применить стиль только для одного столбца?

Для этой конкретной ситуации я хочу, чтобы весь материал в столбце 1 имел прописку, а все материалы в столбце 2 были выровнены правильно. Кажется, что очень не WPF должен устанавливать эти свойства для каждого элемента в сетке.

Я знаю, что могу создать стиль для всех TextBlocks в сетке, делая что-то вроде этого:

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

Но есть способ, чтобы применить этот стиль только управления, скажем, в колонке 2?

Должен ли я использовать другой элемент управления?

+0

Это не возможно с нативным управлением сеткой .. Возможно, вы могли бы сделать что-то подобное, используя настраиваемое свойство –

ответ

17

Вот что я обычно делаю:

<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

Это именно то, что я искал! Приятно и элегантно, почему я не подумал об этом :) –

0

Вы можете определить некоторые стили, как показано ниже, и назначить их на свой 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

Это только для DataGrid? Я не вижу, как применить это к Grid. –

+0

Вы можете назначить стиль для каждого столбца. См. Отредактированный код. – sacha

+0

Я искал, как это сделать со стандартной сеткой, но я посмотрю на DataGrid и посмотрю, смогу ли я использовать это вместо этого. –

Смежные вопросы