У меня есть DataGrid, заполненный из коллекции ObservableCollection.
<Style x:Key="DGHdr_2LineNormal" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Height" Value="40" />
<Setter Property="Margin" Value="0,2,0,0" />
<Setter Property="VerticalAlignment" Value="Bottom" />
<Setter Property="VerticalContentAlignment" Value="Bottom" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
...........................
<DataGrid Grid.Row="1"
AutoGenerateColumns="False"
IsReadOnly="True"
SelectionMode="Single"
SelectionUnit="FullRow"
GridLinesVisibility="None"
Name="MatipBatapConfigList"
ColumnHeaderStyle="{StaticResource DGHdr_2LineNormal}"
ItemsSource="{Binding}">
...........................
</DataGrid>
Некоторые элементы ColumnHeaderStyle являются «нормальными» (1 строка текста):
<DataGridTextColumn Binding="{Binding Path=CurrentItem.hdrSystemName}"
Header="Name">
, но для некоторых я использую StackPanel, чтобы иметь несколько строк, используя Элементы TextBox, изменяя размер шрифта между ними:
<Style x:Key="DGHdr_2LineStackPanel" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Width" Value="Auto" />
<Setter Property="Height" Value="40" />
<Setter Property="Margin" Value="0,0,0,-2" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
...........................
<DataGridTextColumn Binding="{Binding Path=CurrentItem.DestAddr}"
HeaderStyle="{StaticResource DGHdr_2LineStackPanel}" >
<DataGridTextColumn.Header>
<StackPanel Orientation="Vertical" Margin="0,0,0,-2">
<TextBox Text="Destination" IsReadOnly="True"
HorizontalAlignment="Center" Margin="0" BorderThickness="0" FontSize="9"
VerticalAlignment="Bottom" Width="Auto" Padding="0" Height="16" Background="Transparent"/>
<TextBox Text="Address" IsReadOnly="True"
HorizontalAlignment="Center" Margin="0" BorderThickness="0"
VerticalAlignment="Bottom" Width="Auto" Padding="0" Height="18" Background="Transparent"/>
</StackPanel>
</DataGridTextColumn.Header>
</DataGridTextColumn>
Проблема, с которой я столкнулся, заключается в сортировке каждого столбца. В «нормальном» случае я могу щелкнуть в любом месте заголовка столбца, чтобы отсортировать его. В случае StackPanel, однако, есть только тонкая 4-пиксельная область сверху (высота стрелки сортировки), в которой вы можете отсортировать столбец.
Есть ли способ изменить Случаи StackPanel таковы, что он действует как «нормальный» случай, в котором вы можете щелкнуть в любом месте заголовка, чтобы отсортировать его?