2011-10-26 4 views
1

Silverlight Toolkit에는 Textbox와 같은 컨트롤의 여러 인스턴스간에 공유 할 수있는 멋진 ContextMenu가 있습니다. 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를 공유 할 때 이벤트 핸들러가 컨텍스트 메뉴 (예 : 컨텍스트)를 열 때 어떤 컨트롤을 마우스 오른쪽 버튼으로 클릭했는지 알면 매우 유용합니다. 누구든지 효율적인 방법을 제공 할 수 있습니까? 다음과 같이 비교를 위해

,이 필요성은 다른 플랫폼에서 해결 :

  1. WPF의의 ContextMenu가 ContextMenu.PlacementTarget
  2. 윈폼 'ContextMenuStrip을은

감사합니다,

ToolStripItem.Owner.SourceControl있다

답변

1

이 항목에 대해 blogging의 Erik Noren에게 감사드립니다. 내 ContextMenu를 Rectangle에 Visibility = Collapsed를 사용하여 내 MainPage.xaml에 정의하여 마우스 오른쪽 버튼 클릭 이벤트를 처리하지 않도록했습니다. 마우스 오른쪽 버튼은 페이지의 아무 곳이나 클릭하면, 나는의 ContextMenu를 클릭 위치에 텍스트 상자를 식별 한 후 열

VisualTreeHelper.FindElementsInHostCoordinates 

를 사용합니다. SelectedText 종속성 속성을 사용하여 컨트롤을 찾는 Erik의 기술은 훌륭합니다.

관련 문제