сначала немного предыстории. У нас есть некоторые устаревшие элементы управления пользовательского интерфейса, которые определены в текстовых файлах, и мы анализируем те же текстовые файлы для создания xaml.
Один из элементов управления похож на ListView в WPF, а текстовый файл может содержать набор столбцов со своими свойствами. Одно из этих свойств указывает, должен ли столбец иметь фиксированную ширину, которую WPF не обеспечивает автоматически.
Изображение говорит за тысячу слов, поэтому вот пример проанализированного файла, содержащего ListView с четырьмя столбцами:
Для простоты я использовал раскраску в демонстрационных целях. Первый столбец с красным текстом — это столбец с фиксированной шириной.
Для этого во время синтаксического анализа каждый GridViewColumnHeader получает Style, который сам по себе может быть изменен в зависимости от флагов (например, "IsFixed"), содержащихся в свойствах для ту колонку.
Чтобы исправить ширину столбца, я создал Style, который добавляет к стилю установщики MinWidth и MaxWidth. Обратите внимание, что ColumnResize — это настраиваемое перечисление.
private void _ModifyColumnResize(ref Style style, ColumnResize columnResize, int width)
{
if (columnResize == ColumnResize.IsFixed)
{
var minWidth = new Setter(MinWidthProperty, (double)width);
var maxWidth = new Setter(MaxWidthProperty, (double)width);
var fixedColor = new Setter(ForegroundProperty, Brushes.Red);
style.Setters.Add(minWidth);
style.Setters.Add(maxWidth);
style.Setters.Add(fixedColor);
}
}
Кажется, все это работает нормально, двойной щелчок по ручке столбца не меняет автоматически ширину на ширину его содержимого (как в случае с другими тремя столбцами). Проблема в том, что если я нажму на захват, а затем попытаюсь изменить размер, то увижу это:
Как видите, сам столбец имеет одинаковую ширину, но слева и справа от столбца появляется отступ, что нежелательно.
Мой вопрос: могу ли я остановить это поведение с помощью стиля? В идеале я не хотел бы, чтобы захват был виден для столбца, который не позволяет изменять размер, но я не уверен, как это сделать, поскольку Style будет создан в программном коде (во время синтаксический анализ), а не в xaml.
Спасибо за ваше время!