2012-11-06 64 views
0

我有一個TextBox只允許某些字符被輸入到它;我在處理PreviewTextInput事件中的這個邏輯。如果它是允許的角色,則會觸發TextChanged事件,否則將取消TextChanged事件。以編程方式調用PreviewTextInput不調用TextChanged事件

我有另一個應用程序在運行時在第二個屏幕上打開,但即使有其他應用程序處於活動狀態時有鍵盤輸入,它仍應更新主應用程序上當前着重的TextBox。爲此,我在第二個應用程序的OnKeyPress()事件中添加了一個偵聽器,該應用程序在主應用程序中的TextBox焦點上調用PreviewTextInput事件。

下面是代碼:

private void ImageEventController_OnKeyPress(char c) 
     { 
      object focusedElement = this.CurrentKeyboardFocus; 
      if (focusedElement != null) 
      { 
       if (focusedElement is TextBox) 
       { 
        TextBox target = (TextBox)focusedElement; 
        if (target.IsEnabled) 
        { 
         string text = c.ToString(); 
         var routedEvent = TextCompositionManager.PreviewTextInputEvent; 


     target.RaiseEvent(new TextCompositionEventArgs(
        InputManager.Current.PrimaryKeyboardDevice, 
        new TextComposition(InputManager.Current, target, text)) { RoutedEvent = routedEvent }); 
       } 
      } 
     } 
    } 

當這個被調用時,它會通過PreviewTextInput事件,但是TextChanged事件永遠不會被解僱,即使它是一個有效的字符。當編程調用PreviewTextInput時,TextChanged沒有被解僱嗎?

UPDATE:

我在此代碼添加到我的PreviewTextInput事件偵聽器的底部:

if (!e.Handled) 
{ 
    textbox.Text = e.Text; 
} 

這迫使TextChanged觸發事件,並修復功能時,第二個應用程序具有焦點,然而如果主應用程序具有焦點,則只需按下一個按鈕即可更新兩個文本框。

回答

0

我無法弄清楚如何從PreviewTextInput調用TextChanged事件,但我還是設法完成我需要做的:

而不是執行邏輯來驗證按下的鍵是內有效PreviewTextInput事件,我把所有的邏輯都拿出來放到公共函數中。然後在我的ImageEventController_OnKeyPress事件中,我使用LogicalTreeHelper.GetParent()方法來查找必要的控件。從那裏我打電話給公共職能來驗證一個有效的鍵被按下,如果是,我直接撥打TextInput

相關問題