Как заставить ячейку WPF DataGrid выравнивать по правому краю, не делая выбираемую область на новой строке крошечной?

Я использую WPF4.0 DataGrid. При двойном щелчке по ячейке в новой строке все хорошо работает, если я не добавил стиль ячеек к тому столбцу. Например, у меня есть числовой столбец, где я хочу данные, выровненные по правому краю, таким образом, xaml похож на это

<DataGridTextColumn Binding="{Binding Path=ImpaId}"
                    CellStyle="{StaticResource CellRightAlign}">
     <DataGridTextColumn.Header>
          <TextBlock  Style="{StaticResource DataGridHeader}">Impa</TextBlock>
     </DataGridTextColumn.Header>
</DataGridTextColumn>

Где стиль в совместно используемом ресурсе справедлив:

<Style x:Key="CellRightAlign">
    <Setter Property="Control.HorizontalAlignment"
            Value="Right" />
</Style>

Получающуюся выбираемую область на новой строке показывают в изображении как та маленькая синяя область. Это - очень небольшая цель для пользователя для удара, и это, оказывается, наиболее вероятный столбец, с которого они захотят запуститься на новой строке.

DataGrid cell with tiny width

Если я удаляю CellStyle, работы области, как желаемый, но конечно я теряю выравнивание по правому краю.

DataGrid cell with proper width

Кто-либо знает, как достигнуть обоих?

Вещи я попробовал

  1. Установка TargetNullValue на привязке к формату с некоторой шириной. Это работает над существующими строками, но не имеет никакого эффекта на новую строку.
  2. Устанавливая MinWidth на столбце, это не влияло на ширину новой строки выбираемая область.

Вещь, которая работала:

Используя информацию из ответа @AngelWPF я смог измениться от использования CellStyle к использованию ElementStyle следующим образом:

<DataGridTextColumn Binding="{Binding Path=ImpaId}"
                    CellStyle="{StaticResource CellRightAlign}">

Стал

<DataGridTextColumn Binding="{Binding Path=ImpaId}"
                    ElementStyle="{StaticResource CellRightAlign}">
57
задан 19 October 2011 в 00:54

1 ответ

Я имел ту же проблему и решил ее теперь. Если Вы хотите сделать это в коде c#, необходимо установить набор методов set:

DataGridTextColumn numColumn = new DataGridTextColumn
Style s = new Style();
s.Setters.Add(new Setter(HorizontalAlignmentProperty, HorizontalAlignment.Stretch));
s.Setters.Add(new Setter(HorizontalContentAlignmentProperty, HorizontalAlignment.Right));
s.Setters.Add(new Setter(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Stretch));
s.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));
numColumn.CellStyle = s;
1
ответ дан 1 November 2019 в 16:24

Другие вопросы по тегам:

Похожие вопросы: