Search code examples
c#xamlwpfdatagriddependency-propertiescode-behind

How can put Row number in DataGridRowHeader with out of conflict Row Header style


I use this two answer ,answer 2

they work OK ,but these are have conflict with RowHeaderstyle for example when set HorizontalContentAlignment="Center" in xaml or when change temple with TextBlock I have same problem,it has no effect on content! (I change temple of data grid)!!! but now i can't find problem :\ why this problem occur? tanx xaml code :

enter code here

    <Style TargetType="{x:Type DataGridRow}">
        <Setter Property="Background" Value="White" />
        <Setter Property="Template">
            <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridRow}">
                            <Border x:Name="DGR_Border"
                                        BorderBrush="{TemplateBinding BorderBrush}"
                                        BorderThickness="{TemplateBinding BorderThickness}"
                                            SnapsToDevicePixels="True" Background="White">             

                                <SelectiveScrollingGrid>
                                    <SelectiveScrollingGrid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="*" />
                                    </SelectiveScrollingGrid.ColumnDefinitions>
                                    <SelectiveScrollingGrid.RowDefinitions>
                                        <RowDefinition Height="*" />
                                        <RowDefinition Height="Auto" />
                                    </SelectiveScrollingGrid.RowDefinitions>
                                    <DataGridCellsPresenter Grid.Column="1"
                                        ItemsPanel="{TemplateBinding ItemsPanel}"
                                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                    <DataGridDetailsPresenter Grid.Row="1"
                                        Grid.Column="1"
                                        SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding 
                                         AreRowDetailsFrozen,
                                         ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical},
                                          Converter={x:Static DataGrid.RowDetailsScrollingConverter},
                                          RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                                        Visibility="{TemplateBinding DetailsVisibility}" />
                            <DataGridRowHeader Grid.RowSpan="2"  Width="50" Background="Beige" HorizontalAlignment="Center" HorizontalContentAlignment="Center"
                                        SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
                                        Visibility="{Binding HeadersVisibility,
                            ConverterParameter={x:Static DataGridHeadersVisibility.Row},
                               Converter={x:Static DataGrid.HeadersVisibilityConverter},
                                RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">


                            </DataGridRowHeader>
                        </SelectiveScrollingGrid>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>

    </Style>
enter code here

Solution

  • Is seems that in the default Template for DataGridRowHeader, there is no reference to HorizontalContentAlignment:

    https://msdn.microsoft.com/en-us/library/ff506248(v=vs.110).aspx

    look for:

    <Style TargetType="{x:Type DataGridRowHeader}">
    

    I would suggest you to override it's default Style and Template, so you can change the HorizontalAlignment of the Content.