WPF DataGrid: выбранная строка не подсвечивается должным образом при использовании HorizontalAlignment - PullRequest
3 голосов
/ 20 апреля 2011

У меня есть DataGrid, где один столбец должен быть выровнен вправо.Для этого я использую

<DataGridTextColumn.CellStyle>
  <Style>
    <Setter Property="FrameworkElement.HorizontalAlignment" Value="Right"/>
  </Style>
</DataGridTextColumn.CellStyle>

, который прекрасно работает, как показано здесь:

enter image description here

К сожалению, выровненные ячейки не выделены должным образом при выборе строки.Подсвечиваются только данные, но пустая область слева от данных отсутствует, как показано здесь:

enter image description here

Кроме того, область слева от данных нечувствительны к щелчкам мыши больше.В приведенном выше примере щелчок слева от «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>

1 Ответ

5 голосов
/ 20 апреля 2011

Попробуйте DataGridTextColumn.ElementStyle и (при необходимости) DataGridTextColumn.EditingElementStyle

...