2011-03-23 159 views
0

在一個典型的Windows窗體列表查看快捷鍵按Ctrl + + +調整大小在網格中的「自動」大小的所有列(因爲它們會是如果你雙擊列標題中的調整大小手柄)。按Ctrl-Shift鍵加鍵盤快捷鍵和WPF的ListView

在包含列表視圖中相同的快捷方式不工作,我的WPF應用程序。

  1. 任何人都知道這是爲什麼?
  2. 更重要的是 - 是否有一種簡單的方法可以將此功能添加到我的應用程序中的所有網格中?
+0

它是'Ctrl-Plus',而不是'Ctrl-Shift-Plus'(雖然它也可以工作,因爲'Shift'狀態可能未被檢查)。 – 2014-10-06 08:37:43

回答

1

1 - Windows窗體列是硬編碼到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事件中完全一樣的東西,這樣你就不需要手動分配行爲。