WPF Grid - Как применить стиль только для одного столбца? - PullRequest
10 голосов
/ 12 мая 2009

У меня есть таблица WPF с множеством строк и столбцов, каждая из которых содержит такие элементы, как TextBlocks и TextBoxes.

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

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

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

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

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

Ответы [ 2 ]

19 голосов
/ 12 мая 2009

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

<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 голосов
/ 12 мая 2009

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