Search code examples
wpfxamlwpf-controlswpf-style

Sort Caret Not Displaying


I'm having a problem where I'm using a provided style (I can alter it) and most times I get the sort caret, but in one case I don't.

This is the style:

<Style x:Key="StyleDataGridHeader" TargetType="DataGridColumnHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="x:Type DataGridColumndHeader}">
                <Grid x:Name="gridColumn background="{DynamicResource TableHeaderBackground}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock
                        x:name:"columnText" Grid.Column="0" HorizontalAlignment="Left" Background="{DynamicResource TableHeaderBackground}"
                        Focusable="False" Foreground="{DynamicResource TableHeaderFontColor}" 
                        Text="{TemplateBinding Content}" />
                    <Path
                        x:Name"SortArrow" Grid.Column="0" Width="10" Height="10"
                        Fill="{DynamicResource TableColumnHeaderCaretColor}"
                        Focusable="False"
                        Style="{StaticResource CaretIconLeft}"
                        Visibility="Collapsed" />
                    <Thumb
                        x:Name="PART_LeftHeaderGripper"
                        Style="StaticResource ColumnHeaderGripStyle" />
                </Grid>
                
                <ControlTemplate.Triggers>
                    <Trigger Property="SortDirection" Value="Ascending">
                        <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
                        <Setter TargetName="columnText" Property="Foreground" Value="{DynamicResource TableColumnHeaderFocusColor}" />
                        <Setter TargetName="SortArrow" Property="LayoutTransform">
                            <Setter.value>
                                <RotateTransform Angle="180" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="SortDirection" Value="Decending">
                        <Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
                        <Setter TargetName="columnText" Property="Foreground" Value="{DynamicResource TableColumnHeaderFocusColor}" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="columnText" Property="Foreground" Value="{DynamicResource TableColumnHeaderFocusColor}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

And here's an excerpt of the control with a column that works and a column that doesn't:

<UserControl
    ...
    <Grid ...
    
                                    <!-- This one works (sort caret displayed) -->
        <DataGridTemplateColumn 
            Width="50"
            SortMemberpath="ColA" 
            SortDirection="Ascending"
            CellStyle="{StaticResource DataGridCellCenter}"
            HeaderStyle="{StaticResource DataGridHeaderCenter}"
            Header="COL-A">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Path Style="{StaticResource CircleIcon}" Fill="{Binding ColA}" />
                </DataTemplate
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn 

                                    <!--  This one doesn't work  (sort caret not displayed) -->
        <DataGridTemplateColumn 
            Width="300"
            SortMemberpath="ColB" 
            SortDirection="Ascending"
            CellStyle="{StaticResource DataGridCellCenter}"
            HeaderStyle="{StaticResource DataGridHeaderCenter}"
            Header="COL-B">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding IconVals, Mode=OneWay}"/>
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" />
                            </ItemsPanelTemplate>   
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <controls:StandardButtonControl
                                    State="{Binding BState}"
                                    Label="{Binding BLabel}" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    <ItemsControl />
                </DataTemplate
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn 
    </Grid>
</UserControl>

The case where it doesn't work is a little more complex, but I can't figure out what's missing; any guidance would be appreciated.


Solution

  • SortDirection which you check in your triggers could start off as Null, and thus your Path will stay with Visibility Collapsed.