我有一個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
觸發事件,並修復功能時,第二個應用程序具有焦點,然而如果主應用程序具有焦點,則只需按下一個按鈕即可更新兩個文本框。