Как заставить ячейку 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}">
58
задан Tod 18 October 2011 в 20: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;
2
ответ дан 24 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

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