2011-10-26 19 views
1

Silverlight Toolkitには素敵なContextMenuがあり、Textboxなどの複数のコントロールインスタンスで共有できます。共有は、ContextMenuが他のコントロールをホストするコンテナ内で宣言されているために生じることがあります。Silverlight Toolkit ContextMenu:どのコントロールを右クリックしましたか?

<StackPanel> 
    <TextBox x:Name="box1" Text="{Binding str1}" /> 
    <TextBox x:Name="box2" Text="{Binding str2}" /> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu Name="cm"> 
      <toolkit:MenuItem Name="cmiCut" Header="Cut" /> 
      <toolkit:MenuItem Name="cmiCopy" Header="Copy" /> 
      <toolkit:Separator/> 
      <toolkit:MenuItem Name="cmiPaste" Header="Paste" /> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
</StackPanel> 

共有は、ContextMenuService.SetContextMenuを呼び出しても実行できます。

ContextMenuを共有すると、ContextMenu(コンテキストなど)を開くためにどのコントロールを右クリックしたかをイベントハンドラが知ることが非常に役立ちます。誰もこれを行うための効率的な方法を提供することができますか?次のように比較のために、この必要性は、他のプラットフォームで対処されて

  1. WPFののContextMenuはContextMenu.PlacementTarget
  2. のWinForms'いるContextMenuStripはToolStripItem.Owner.SourceControl

おかげで、

を持っています

ビル

答えて

1

このトピックについては、bloggingのErik Norenに感謝したいと思います。 ContextMenuを私のMainPage.xamlでVisibility = CollapsedのRectangleで定義し、マウスの右クリックイベントを処理しないようにしました。マウスの右ボタンがページ上の任意の場所をクリックすると、私はクリック位置にテキストボックスを確認してからのContextMenuを開くために

VisualTreeHelper.FindElementsInHostCoordinates 

を使用しています。 SelectedText依存関係プロパティを持つコントロールを見つけるためのErikのテクニックは素晴らしいです。

関連する問題