2014-01-18 25 views
0

我有下面的代碼,以大膽文字italicise在RichEditBox:RichEditBox:使用CTRL + I設定斜體文本刪除文本

private async void Page_KeyDown(object sender, KeyRoutedEventArgs e) 
{ 
    var state = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Control); 
    if ((state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down) 
    { 
     switch (e.Key) 
     { 
      case Windows.System.VirtualKey.B: 
       await BoldText(); 
       break; 
      case Windows.System.VirtualKey.I: 
       await ItaliciseText(); 
       break; 
     } 
    } 
} 

private async Task BoldText() 
{ 
    ITextSelection selectedText = editor.Document.Selection; 
    if (selectedText != null) 
    { 
     ITextCharacterFormat charFormatting = selectedText.CharacterFormat; 
     charFormatting.Bold = FormatEffect.Toggle; 
     selectedText.CharacterFormat = charFormatting; 
    } 
} 

private async Task ItaliciseText() 
{ 
    ITextSelection selectedText = editor.Document.Selection; 
    if (selectedText != null) 
    { 
     ITextCharacterFormat charFormatting = selectedText.CharacterFormat; 
     charFormatting.Italic = FormatEffect.Toggle; 
     selectedText.CharacterFormat = charFormatting; 
    } 
} 

BoldText()ItaliciseText()也從工具欄上的按鈕調用。

當按下Bold時,所選文本將被正確格式化爲粗體文本。

當按下CTRL+B時,所選文本將被正確格式化爲粗體文本。

當按下Italic,選定的文本格式化爲斜體正確

當按下CTRL+I,選定的文本格式化爲斜體正確,但隨後被刪除

我知道的格式正在發生,因爲如果我按CTRL + Z,文本將以斜體顯​​示。在清除文本後,CTRL + I在selectedText.CharacterFormat = charFormatting;之後引起附加操作。

我無法弄清楚爲什麼會出現這種情況,因爲代碼與完美無瑕的BoldText()代碼和單詞在工具欄上的按鈕發射時幾乎完全相同。

任何想法?

回答

2

Ctrl+I上可能有其他處理(這可能是一個導致文本刪除),考慮設置KeyRoutedEventArgs.Handled = true;,看到this ,在這種情況下(在這種情況下爲e.Handled=true;),如果您不希望此KeyEvent在其他地方處理,則不在此處。

+0

謝謝vutran,這是訣竅! – roryok

+0

@ roryok不客氣。 – vutran