Я использую 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>
Результирующая выбираемая область в новой строке показана на изображении как эта небольшая синяя область. Это очень маленькая цель для пользователя, и это наиболее вероятный столбец, с которого они захотят начать в новой строке.
Если я удалю CellStyle, область будет работать так, как нужно, но, конечно, я потеряю правильное выравнивание.
Кто-нибудь знает, как достичь и того, и другого?
Что я пробовал
Что сработало:
Используя информацию из ответа @AngelWPF, я смог перейти от использования CellStyle к использованию ElementStyle следующим образом:
<DataGridTextColumn Binding="{Binding Path=ImpaId}"
CellStyle="{StaticResource CellRightAlign}">
Стало
<DataGridTextColumn Binding="{Binding Path=ImpaId}"
ElementStyle="{StaticResource CellRightAlign}">
Я имел ту же проблему и решил ее теперь. Если Вы хотите сделать это в коде 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;