2012-03-16 98 views
0

在我的主窗口中,我有一些映射到1,2,3,4的命令。當我在文本框中按下這些鍵時,這些命令會被執行而不是1/2/3/4添加到文本框中。確保在文本框中鍵入這些鍵的最佳方法是添加這些文本而不是執行命令?輸入綁定從文本框中竊取輸入

這裏是一個示例程序,當我按'1'時,執行的邏輯運行並且'1'不被添加到文本框中。任何其他鍵都按照他們應該的方式工

<Window x:Class="TextboxWithCommands.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.InputBindings> 
     <KeyBinding Command="Open" Key="D1"/>  
    </Window.InputBindings> 

    <Window.CommandBindings> 
     <CommandBinding Command="Open" 
         Executed="CommandBinding_Executed" 
         CanExecute="CommandBinding_CanExecute"/> 
    </Window.CommandBindings> 

    <Grid> 
     <TextBox/> 
    </Grid> 
</Window> 



private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) 
     { 

     } 

     private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
     { 
      e.CanExecute = true; 
     } 
+0

你可以添加一些代碼,如何你的命令來實現? – 2012-03-16 17:20:36

+0

一個有點不好的(並且未經測試的)做法可能是檢查哪些人在CanExecute處理程序中關注並在文本框中返回false。 – 2012-03-16 17:44:03

+0

@MattBurland對不起,我沒有看到你的建議。然而,你的建議完美地工作,並且如果該事件處理'CANExecute',它並不是一件容易的事。:) – Silvermind 2012-03-16 19:27:36

回答

0

這裏是這樣做的一種方法:

private void CommandBinding_CanExecute(object sender , CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = !(e.ContinueRouting = (FocusManager.GetFocusedElement(this) is TextBox)); 
} 
+0

它可以工作,但我想補充的一件事是它的e.ContinueRouting允許文本傳遞到文本框。如果文本框看到文本,則e.CanExecute不起作用。 – Lap 2012-03-19 10:17:35