2017-03-03 1 views
1

これは私のContextMenuのスタイルです:WPFのContextMenu:MenuItemのアイコンの視認性結合エラー

<Style x:Key="DIOStyle" TargetType="ContentControl"> 
     <Setter Property="Tag" Value="{Binding Content,RelativeSource={RelativeSource Mode=Self}}"/> 
     <Setter Property="ContextMenu"> 
      <Setter.Value> 
       <ContextMenu> 
        <MenuItem Style="{StaticResource DeleteMenuItemStyle}"/> 
        <!--<MenuItem Header="Normality"> 
         <MenuItem Style="{StaticResource NcMenuItemStyle}"/> 
         <MenuItem Style="{StaticResource NaMenuItemStyle}"/> 
        </MenuItem>--> 
        <MenuItem Style="{StaticResource BothContactsMenuItemStyle}"/> 
       </ContextMenu> 
      </Setter.Value> 
     </Setter> 
... 

、これが私のMenuItemのスタイルである:結合

<Style x:Key="BothContactsMenuItemStyle" TargetType="MenuItem"> 
     <Setter Property="Header" Value="Both Contacts"/> 
     <Setter Property="Command" Value="{Binding PlacementTarget.Tag.BothNaNcChangeCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}}"/> 
     <Setter Property="Icon"> 
      <Setter.Value> 
       <Image Style="{StaticResource Tick16Style}" Visibility="{Binding PlacementTarget.Tag.BothNaNc, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}, Converter={StaticResource BoolToVis}}"/> 
      </Setter.Value> 
     </Setter> 
    </Style> 

コマンドではなく、アイコンの可視性、働いていますバインディングは私にこのエラーを与えます:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ContextMenu', AncestorLevel='1''. BindingExpression:Path=PlacementTarget.Tag.BothNaNc; DataItem=null; target element is 'Image' (Name=''); target property is 'Visibility' (type 'Visibility')

なぜですか? 注意してください、これが動作している:あなたは、リソースとしてImage要素を定義することができ

<MenuItem Header="TEST" Visibility="{Binding PlacementTarget.Tag.BothNaNc, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}, Converter={StaticResource BoolToVis}}"/> 

答えて

1

。これは動作するはずです:

<Image x:Key="img" x:Shared="False" 
       Style="{StaticResource Tick16Style}" 
       Visibility="{Binding PlacementTarget.Tag.BothNaNc, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}, 
          Converter={StaticResource BoolToVis}}"/> 

<Style x:Key="BothContactsMenuItemStyle" TargetType="MenuItem"> 
    <Setter Property="Header" Value="Both Contacts"/> 
    <Setter Property="Command" Value="{Binding PlacementTarget.Tag.BothNaNcChangeCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}}"/> 
    <Setter Property="Icon" Value="{StaticResource img}" /> 
</Style> 

あなたが現在行っているようにあなたが<Setter.Value>にインラインで定義Image要素にIconプロパティを設定した場合、それは親WindowまたはUserControlまたはどこStyleが定義されているからDataContextを継承します。