Ctrl-Shift-Plus键盘快捷键和WPF列表视图

时间:2011-03-23 09:00:24

标签: wpf listview keyboard-shortcuts

在典型的Windows窗体列表视图中,快捷键 Ctrl + Shift + + 将网格中的所有列调整为“自动” “size(如果你双击列标题中的resize句柄,就会出现这种情况)。

在包含列表视图的WPF应用程序中,相同的快捷方式不起作用。

  1. 任何人都知道这是为什么?
  2. 更重要的是 - 有一种简单的方法可以将此功能添加到我的应用程序中的所有网格中吗?

1 个答案:

答案 0 :(得分:1)

1 - 在Windows窗体中,列被硬编码到ListView中,在WPF中无法保证甚至会有任何内容,因此包含该热键没有多大意义,只有当一个特定的{{1}时才会有效使用。

2 - 应用于所有部分可能有点环绕行为,但这里是行为方法:

ListView.View
<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); } } 事件完全相同,这样您就不需要手动分配行为。