2010-08-23 48 views

回答

2
public Window1() 
{ 
    InitializeComponent(); 
    textBox.KeyDown += OnTextBoxKeyDown; 
} 

private void OnTextBoxKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.B 
     && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
    { 
     string boldText = "**"; 
     int beginMarkerIndex = textBox.SelectionStart; 
     int endMarkerIndex = beginMarkerIndex + textBox.SelectionLength + boldText.Length; 
     textBox.Text = textBox.Text.Insert(beginMarkerIndex, boldText) 
            .Insert(endMarkerIndex, boldText); 
    } 
} 
+0

感謝,但我真的不明白爲什麼你需要使用'e.Key&Key.B'不能只是'e.Key == Key.Tab'嗎?對於'(Keyboard.Modifiers&ModifierKeys.Control)== ModifierKeys.Control' ...哦,我也注意到使用'&'這是什麼?但爲了進一步說明,如何按Ctrl + Shift + B(作爲示例)如何按下 – 2010-08-25 15:11:08

+0

@ jiewmeng:實際上,你是對的,在這種情況下,e.Key == Key.B可以。 &pattern(按位AND)用於Flags枚舉。基本上,ModifierKeys枚舉可以同時處於幾個「狀態」,因此您可以測試某個特定的「狀態」是否有效。 http://msdn.microsoft.com/en-us/library/ms229062.aspx – Ani 2010-08-25 15:39:36

+0

@jiewmeng:要測試'Shift'是否也被按下,請添加&&(Keyboard.Modifiers&ModifierKeys.Shift)== ModifierKeys.Shift )到條件。 – Ani 2010-08-25 15:41:26

0

未測試:

TextBox textBox; 
// ... 
string bolded = "**" + textBox.SelectedText + "**"; 
int index = textBox.SelectionStart; 
textBox.Text.Remove(textBox.SelectionStart, textBox.SelectionLength); 
textBox.Text.Insert(index, bolded); 
相關問題