Сочетание клавиш Ctrl-Shift-Plus и просмотр списка WPF - PullRequest
0 голосов
/ 23 марта 2011

В типичном представлении списка форм Windows комбинация клавиш Ctrl + Shift + + изменяет размер всех столбцов сетки до их «автоматического» размера (как если бы вы дважды щелкнули по метке изменения размера в заголовке столбца).

В моем приложении WPF, содержащем представление списка, такой же ярлык не работает.

  1. Любойзнаете, почему это так?
  2. Что более важно - есть ли простой способ добавить эту функцию ко всем сеткам в моем приложении?

1 Ответ

1 голос
/ 04 мая 2011

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

2 - часть «применимо ко всем» может быть немного обходной с поведением, но вот метод поведения:

<ListView>
    <i:Interaction.Behaviors>
        <b:AutoSizeColumnsKeyboardShortcutBehavior />
    </i:Interaction.Behaviors>
    <!-- ... -->
</ListView>
public class AutoSizeColumnsKeyboardShortcutBehavior : Behavior<ListView>
{
    public class AutoSizeColumnsCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            var target = parameter as ListView;
            if (target == null) return false;
            var view = target.View as GridView;
            return view != null;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            var target = parameter as ListView;
            var view = target.View as GridView;
            foreach (var column in view.Columns)
            {
                column.Width = double.NaN;
            }
        }
    }

    protected override void OnAttached()
    {
        base.OnAttached();
        var command = new AutoSizeColumnsCommand();
        var keybinding = new KeyBinding(command,
            new KeyGesture(Key.OemPlus, ModifierKeys.Control | ModifierKeys.Shift))
            {
                CommandParameter = this.AssociatedObject
            };
        this.AssociatedObject.InputBindings.Add(keybinding);
    }
}

Вы можете определить глобальный неявный стиль, который в значительной степени делает то же самое в событии Loaded элемента управления, поэтому вам не нужно вручную назначать поведение.

...