2012-01-08 16 views
1

私は、次のイベントハンドラを持っている:WPF RichTextBoxのマウス右ボタンのデフォルトのコンテキストメニューを無効にするにはどうすればよいですか?

private void rtb_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.RightButton == MouseButtonState.Pressed) 
    { 
     // Get the nearest TextPointer to the mouse position. 
     TextPointer location = rtb.GetPositionFromPoint(Mouse.GetPosition(rtb), true); 

     // Get the nearest word using this TextPointer. 
     TextRange word = GetWordRange(location); 

     // Display the word. 
     tb.Text = word.Text; 

     e.Handled = true; 
    } 
} 

これは、リッチテキストボックスのPreviewMouseDownイベントに配線されています。このイベントが発生し、上記のメソッドが呼び出され、カーソルの下の単語が別のTextBox(tb)に表示されます。

問題は、マウスの右ボタンクリックイベントのデフォルトコンテキストメニュー(カット/コピー/ペーストオプションを含む)が表示されることです。 Handledプロパティをtrueに設定することは役に立ちません。このコンテキストメニューを無効にするにはどうすればよいですか?

EDIT:XAMLコード:

<Window x:Class="rtbTest1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <RichTextBox Height="175" HorizontalAlignment="Left" Margin="10,127,0,0" Name="rtb" VerticalAlignment="Top" Width="483" PreviewMouseDown="rtb_MouseDown" /> 
     <TextBox Height="59" HorizontalAlignment="Left" Margin="286,24,0,0" Name="tb" VerticalAlignment="Top" Width="186" /> 
     <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="63,56,0,0" Name="btn1" VerticalAlignment="Top" Width="75" Click="btn1_Click" /> 
    </Grid> 
</Window> 
+2

はい、これは感謝、働い – Mharlin

答えて

10

nullそれを:

<RichTextBox ContextMenu="{x:Null}"/> 
+0

だけでなく、XAMLコードを追加してください。私が理解できないのは、RichTextBoxのすべての*コンテキストメニューを無効にしないのですか?また、これをどうやって行うべきか、あるいはこれは猛烈な解決策ですか? – Sabuncu

+0

@Sabuncu:複数のコンテキストメニューがありますか?他のコンテキストメニューをnullにしないで、必要なコンテキストメニューに設定したいのであれば、これについては遠隔からは何もありません。 –

+0

カット/コピー/ペーストを含むコンテキストメニューが表示されます。これは、アップストリームのイベントハンドラがトリガされるためです。イベントハンドラコードでHandledをtrueに設定していても、これはなぜですか? – Sabuncu

関連する問題