2015-10-01 5 views
0

Я пытаюсь выровнять текст во всех ячейках DataGrid до центра. Все примеры, которые я нашел о том, как это сделать, показывают меньшие DataGrids, где есть ContentPresenter, у которого есть свойство выравнивать текст по вертикали, но мой стиль для DataGrid не имеет ContentPresenter. Я попытался выровнять через созданиеxaml Не удается выровнять текст по вертикали внутри шаблона DataGrid

 <Setter Property="VerticalAlignment" Value="Center"/> 

в стиле с TargetType x: Введите DataGrid.

Весь код стиля выглядит так

<Style x:Key="myDataGrid" TargetType="{x:Type DataGrid}"> 
    <Setter Property="AlternatingRowBackground" Value="WhiteSmoke"/> 
    <!-- <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> --> 
    <Setter Property="Background" Value="{DynamicResource grayBackground}"/> 
    <Setter Property="RowBackground" Value="{DynamicResource rowWhiteBackground}"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="BorderBrush" Value="{DynamicResource standardRed}"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="FontFamily" Value="Helvetica"/> 
    <Setter Property="GridLinesVisibility" Value="Vertical"/> 
    <Setter Property="VerticalGridLinesBrush" Value="LightGray"/> 
    <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected"/> 
    <Setter Property="MinRowHeight" Value="30"/> 
    <Setter Property="MinColumnWidth" Value="100"/> 
    <Setter Property="VerticalAlignment" Value="Center"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
    <Setter Property="ScrollViewer.PanningMode" Value="Both"/> 
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGrid}"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True"> 
        <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false"> 
         <ScrollViewer.Template> 
          <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="*"/> 
             <ColumnDefinition Width="Auto"/> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition Height="*"/> 
             <RowDefinition Height="Auto"/> 
            </Grid.RowDefinitions> 
            <Button Command="{x:Static DataGrid.SelectAllCommand}" Focusable="false" Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 
            <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 
            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" Grid.ColumnSpan="2" Grid.Row="1"/> 
            <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Grid.Row="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/> 
            <Grid Grid.Column="1" Grid.Row="2"> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> 
              <ColumnDefinition Width="*"/> 
             </Grid.ColumnDefinitions> 
             <ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/> 
            </Grid> 
           </Grid> 
          </ControlTemplate> 
         </ScrollViewer.Template> 
         <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </ScrollViewer> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsGrouping" Value="true"/> 
       <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/> 
      </MultiTrigger.Conditions> 
      <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
     </MultiTrigger> 
    </Style.Triggers> 
</Style> 

Код взят из копии DataGrid стиля, который я редактирования в Blend, и Visual Studio. Я не могу найти, где и как я мог бы выравнивать текст всех ячеек по вертикали. Цените всю помощь, которую я могу получить.

ответ

0

Попробуйте этот.

<DataGrid.LayoutTransform> 
       <TransformGroup> 
        <RotateTransform Angle="90" /> 
        <MatrixTransform Matrix="-1,0,0,1,0,0" /> 
       </TransformGroup> 
      </DataGrid.LayoutTransform> 
      <DataGrid.ColumnHeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}" 
         BasedOn="{StaticResource {x:Type DataGridColumnHeader}}"> 
        <Setter Property="LayoutTransform"> 
         <Setter.Value> 
          <TransformGroup> 
           <RotateTransform Angle="-90" /> 
           <ScaleTransform ScaleX="1" ScaleY="-1" /> 
          </TransformGroup> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </DataGrid.ColumnHeaderStyle> 
      <DataGrid.CellStyle> 
       <Style TargetType="DataGridCell"> 
        <Setter Property="LayoutTransform"> 
         <Setter.Value> 
          <TransformGroup> 
           <RotateTransform Angle="-90" /> 
           <ScaleTransform ScaleX="1" ScaleY="-1" /> 
          </TransformGroup> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </DataGrid.CellStyle> 
0

Это сделает для вас:

<Window.Resources>   
    <ControlTemplate x:Key="CustomCell" TargetType="DataGridCell"> 
     <Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="100"> 
      <ContentPresenter Width="Auto" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
     </Label> 
    </ControlTemplate>  

    <Style TargetType="DataGridCell"> 
     <Setter Property="Template" Value="{StaticResource CustomCell}"/> 
    </Style> 

    ... 

</Window.Resources> 
Смежные вопросы