2012-08-07 69 views
0

我試圖通過名稱將元素綁定到ContextMenu中的MenuItem。元素綁定:與名稱綁定的上下文菜單

<UserControl x:Class="ATCheckerView.TestsPropagate" 
     x:Name="TestPropagateRoot" ... 

工作版本:

非工作:

  <HierarchicalDataTemplate x:Key="SchemTemplate">     
      <TextBlock Text="{Binding path}"> 
       <TextBlock.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="{Binding ElementName=TestPropagateRoot}" 
            Command="{Binding ElementName=TestPropagateRoot, Path=DataContext.vclient.OpenInViewer}" 
            CommandParameter="{Binding}" /> 
        </ContextMenu> 
       </TextBlock.ContextMenu> 
      </TextBlock> 
     </HierarchicalDataTemplate> 

回答

1

here是一個類似的問題和良好的答案,顯示出某些方面如何處理文本菜單結合。

btw is use PlacementTarget綁定大部分時間,例如

 <TextBlock Text="{Binding path}"> 
      <TextBlock.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="Test" 
           Command="{Binding Path=PlacementTarget.DataContext.vclient.OpenInViewer, 
               RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
           CommandParameter="{Binding}" /> 
       </ContextMenu> 
      </TextBlock.ContextMenu> 
     </TextBlock> 

編輯:{X:參考TestPropagateRoot}還可以,如果你使用選項.net4.0

+0

的TextBlock和文本菜單和菜單項的最初的DataContext相同。所以你的命令的綁定沒有意義。 – psct 2012-08-07 14:10:59

0

我的解決辦法是:

<HierarchicalDataTemplate x:Key="SchemTemplate"> 
      <TextBlock Text="{Binding path}" 
         Tag="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:TestsPropagate}}}"> 
       <TextBlock.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="Открыть для просмотра" 
            Command="{Binding Path=PlacementTarget.Tag.vclient.OpenInViewer, 
          RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}" 
            CommandParameter="{Binding}" />          
        </ContextMenu> 
       </TextBlock.ContextMenu> 
      </TextBlock> 
</HierarchicalDataTemplate>