2017-03-03 2 views
1

Dies ist der Stil für meine ContextMenu:WPF ContextMenu: MenuItem Symbol Sichtbarkeit Bindung Fehler

<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> 
... 

und das ist der Stil für meine 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> 

Befehlsbindung funktioniert, statt Symbol Sichtbarkeit Bindung gib mir diesen Fehler:

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')

Warum? Bitte beachten Sie, dass dies funktioniert:

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

Antwort

1

Sie das Image Element als Ressource definieren könnte. Dies sollte funktionieren:

<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> 

Wenn Sie die Icon Eigenschaft auf ein Image Element festlegen, die Sie inline in <Setter.Value> definieren, wie Sie derzeit tun, wird es die DataContext von der Mutter Window oder UserControl oder wo auch immer die Style definiert erben .