У меня есть DataGrid
, где один столбец должен быть выровнен вправо.Для этого я использую
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Right"/>
</Style>
</DataGridTextColumn.CellStyle>
, который прекрасно работает, как показано здесь:
К сожалению, выровненные ячейки не выделены должным образом при выборе строки.Подсвечиваются только данные, но пустая область слева от данных отсутствует, как показано здесь:
Кроме того, область слева от данных нечувствительны к щелчкам мыши больше.В приведенном выше примере щелчок слева от «12,34» не выберет первую строку (но щелчок справа от «А1»).В целом, это плохо для пользователя.
Итак, как мне сделать HorizontalAlignment
без прерывания выбора строки?Я хочу, чтобы вся строка была выделена, и я хочу иметь возможность щелкнуть в любом месте, чтобы выбрать строку.
Я использую VS 2010, .NET 4, как Win XP, так и Win 7.
Код для воспроизведения моего примера:
namespace WpfApplication2
{
public class ListItem
{
public string FieldA { get; set; }
public decimal FieldB { get; set; }
public string FieldC { get; set; }
}
}
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:My="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<x:Array x:Key="List" Type="{x:Type My:ListItem}">
<My:ListItem FieldA="A1" FieldB="12.34" FieldC="C1"/>
<My:ListItem FieldA="A2" FieldB="1000.00" FieldC="C2"/>
<My:ListItem FieldA="A3" FieldB="987.6" FieldC="C3"/>
</x:Array>
</Window.Resources>
<Grid>
<DataGrid ItemsSource="{StaticResource List}" AutoGenerateColumns="False" SelectionUnit="FullRow" >
<DataGrid.Columns>
<DataGridTextColumn Header="ColumnA" Binding="{Binding Path=FieldA}" Width="150" />
<DataGridTextColumn Header="ColumnB" Binding="{Binding Path=FieldB, StringFormat='#,##0.00'}" Width="150" >
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Right"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="ColumnC" Binding="{Binding Path=FieldC}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>