2014-04-23 7 views
0

Grid가있는 ContentControl이 있습니다. 각 ListBoxItem의 ContextMenu 용 템플릿이 있습니다. ContextMenu이 같은데 :WPF XAML - 템플릿에 매개 변수를 제출하는 방법?

그리드는 다음과 같습니다
<ContentControl.Resources> 
    <ContextMenu x:Key="SimpleDataObjectContextMenu" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"> 
     <MenuItem Header="Create" Command="{Binding AddRelation}" CommandParameter="..Name..of..caller.."/> 
     <MenuItem Header="Delete" Command="{Binding DeleteRelation}" CommandParameter="..Name..of..caller.."//> 
    </ContextMenu> 
</ContentControl.Resources> 

:

<Grid> 
    <Rectangle x:Name="LeftRectangle" Width="5" Height="5" Fill="Black" Margin="5" ContextMenu="{StaticResource SimpleDataObjectContextMenu}"/> 
    <TextBlock Text="{Binding Model.Name}"/> 
    <Rectangle x:Name="RightRectangle" Width="5" Height="5" Fill="Black" Margin="5" ContextMenu="{StaticResource SimpleDataObjectContextMenu}"/> 
</Grid> 

내가 "LeftRectangle"과 자신의 ContextMenu 템플릿 "SimpleDataObjectContextMenu을"사용 "RightRectangle"(에서 제출할) x : Name을 "SimpleDataObjectContextMenu"에 추가합니다. 그러면이 Name을 Template의 CommandParameter로 제출할 수 있습니다. 의 ContextMenu 왼쪽 사각형에 연 경우 대신 ..Name..of..caller의

.. 예를 들어 나는

어떤 생각, 내가 어떻게 깨달을 수있다 ... "LeftRectangle"를 보내려면 이?

답변

1

당신의 ContextMenu 바인딩 DataContext을 제거

<ContextMenu x:Key="SimpleDataObjectContextMenu" > 
    <MenuItem Header="Create" Command="{Binding AddRelation}" CommandParameter="{Binding Parent.PlacementTarget.Name, RelativeSource={RelativeSource Self}}"/> 
    <MenuItem Header="Delete" Command="{Binding DeleteRelation}" CommandParameter="{Binding Parent.PlacementTarget.Name, RelativeSource={RelativeSource Self}}"/> 
</ContextMenu> 
+0

고마워, 너 솔루션이 나를 위해 완벽하게 일했다. –

0

는이

CommandParameter="{Binding Path=Menu.UIElement, RelativeSource={RelativeSource Self} 

같은 명령 매개 변수를 결합 할 수있는 코드에서이

 var rectangle = parameter as Rectangle ; 
     if(rectangle != null) 
     { 
     var name = rectangle.Name; 
     } 
처럼 사각형으로 매개 변수를 캐스트 할 수 있습니다 뒤에