2009-06-23 83 views
11

我想創建一個簡單的列表框並將SelectAll作爲上下文菜單項。但是,似乎ListBox有一些內置的SelectAll處理,我無法工作,但干擾了我嘗試實現SelectAll。WPF列表框和全選

我的整個XAML是:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Window.CommandBindings> 
     <CommandBinding Command="ApplicationCommands.SelectAll" 
         Executed="SelectAllExecuted" /> 
    </Window.CommandBindings> 
    <DockPanel> 
     <CheckBox DockPanel.Dock="Top">My Checkbox</CheckBox> 
     <ListBox Name="listBox" SelectionMode="Multiple"> 
      <ListBox.ContextMenu> 
       <ContextMenu> 
        <MenuItem Command="ApplicationCommands.SelectAll" /> 
       </ContextMenu> 
      </ListBox.ContextMenu> 
     </ListBox>     
    </DockPanel> 
</Window> 

SelectAllExecuted很簡單:

private void SelectAllExecuted(object sender, ExecutedRoutedEventArgs e) 
{ 
    listBox.SelectAll(); 
} 

控制+ A工作,如果列表框沒有焦點。上下文菜單項正常工作。但是如果列表框着重於Control + A,則拒絕工作。

我覺得我在對抗列表框,但我不需要。

編輯:看起來我的整個問題都與多選模式有關。如果我將它設置爲Extended,那麼一切正常,但我不想在擴展模式下使用它。

回答

17

ListBox似乎有它自己的內部命令Ctrl + A組合鍵,as Marco Zhou explains。我們也可以通過嘗試在Execute和Preview Execute處理程序中放置一個斷點來測試它。正如您將看到的,當ListBox具有焦點並且按下組合鍵時,兩者都不會到達。即使我們將SelectionMode設置爲Extended,並且我們可以看到命令選擇的項目仍然沒有到達處理程序。謝天謝地,我們可以通過重新分配現有的InputGesture來覆蓋它。我們可以在ListBox中執行此操作以擺脫它的自定義Ctrl + A處理,並將其重新分配給ApplicationCommands.SelectAll命令。

<ListBox Name="listBox" 
     SelectionMode="Multiple"> 
    <ListBox.InputBindings> 
     <KeyBinding Command="ApplicationCommands.SelectAll" 
        Modifiers="Ctrl" 
        Key="A" /> 
    </ListBox.InputBindings>    
    ... 
</ListBox> 

一旦鍵綁定添加到列表框,當它集中它現在將航線Ctrl + A鍵返回到您現有的選命令和SelectAllExecuted。

1

對於那些像我這樣誰拉閘在後臺代碼:)做的一切......

listBox.InputBindings.Add(new KeyBinding(ApplicationCommands.SelectAll, 
          new KeyGesture(Key.A, ModifierKeys.Control))); 
listBox.CommandBindings.Add(new CommandBinding(ApplicationCommands.SelectAll, (_sender, _e) => 
{ 
    listBox.SelectAll(); 
})); 
+0

礦山以上XAML沒有工作,但後面的代碼工作完美的情況下。謝謝 – 2017-07-17 20:09:25