Существует WPF DataGrid
с функцией динамического изменения FontSize
для события Ctrl + MouseWheel.
Он реализован с использованием функции Caliburn cal: Message.Attach:
<!-- xaml -->
cal:Message.Attach="[Event PreviewMouseWheel] = [Action ChangeDataGridFont($eventArgs)]"
C # ViewModel:
public void ChangeDataGridFont(MouseWheelEventArgs args)
{
if (Keyboard.Modifiers == ModifierKeys.Control && args != null)
{
DataGridFontSize += Math.Sign(args.Delta) * 2;
args.Handled = true;
}
}
DataGridFontSize
- это свойство виртуальной машины, которое привязано к CellStyle
из DataGrid
.
При загрузке ширина столбцов выравнивается по содержимому - ОК:
Если пользователь увеличивает размер шрифта, ширина столбцов автоматически настраивается - ОК:
Однако, если размер шрифта равенуменьшилось - столбцы не настроены. См. Пробелы:
Есть ли способ преодолеть этот эффект (в рамках MvvM, если это возможно)?
Обновление: похоже, что нам нужно обновить ширину столбцов вручную, когда мы изменим FontSize
. Я могу привязать ширину столбца в соответствующем стиле:
<Style x:Key="IdCellStyle" TargetType="{x:Type DataGridCell}" >
<Setter Property="Width" Value="{Binding DataContext.ColWidth, Mode=TwoWay,
RelativeSource={RelativeSource AncestorType=UserControl}}" />
....
</Style>
и определить свойство:
public double ColWidth
{
get => _colWidth;
set
{
_colWidth = value;
NotifyOfPropertyChange();
}
}
Что я должен установить ColWidth
в DataGridFontSize
setter?