2010-07-19 4 views
5

Est-ce que quelqu'un sait pourquoi cela produirait un XamlParseException « Impossible d'ajouter le contenu de type « System.Windows.Controls.ContextMenu » à un objet de type « System.Object » »:ContextMenu dans le style poseur

<ItemsControl> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas ClipToBounds="True"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="ContentPresenter"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         <MenuItem Header="Remove" /> 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

Et les travaux suivants vont bien?

<ItemsControl> 
    <ItemsControl.Resources> 
     <ContextMenu x:Key="NodeContextMenu"> 
      <MenuItem Header="Remove" /> 
     </ContextMenu> 
    </ItemsControl.Resources> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas ClipToBounds="True"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="ContentPresenter"> 
      <Setter Property="ContextMenu" Value="{StaticResource NodeContextMenu}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 
+0

c'est bizarre. doit être quelque chose à voir avec la valeur attend un objet mais je ne vois pas pourquoi cela provoquerait une exception ... Si cela est dans Expression Blend, il peut être utile de rouvrir tout parce qu'il peut parfois jouer –

+0

dans son studio visuel 2008 l'application est exécutée, j'ai déplacé le menu contextuel vers les ressources et cela fonctionne mais je pense qu'il devrait fonctionner avec le setter aussi, c'est peut-être un bug – serine

+1

C'est effectivement le même problème qu'avec [cette question] (http: // stackoverflow. com/questions/1495489/impossible-à-set-système-windows-contrôles-menuitem-icon-thru-a-setter). – CodeNaked

Répondre

0

On dirait un bug qui a été corrigé depuis - le code en question génère une exception d'analyse XAML lors du ciblage .NET 3.5, mais fonctionne très bien pour moi au moment de cibler .NET 4.0. Si vous suivez le lien fourni dans les commentaires ci-dessus, vous trouverez un problème de connexion avec des commentaires d'autres personnes indiquant que le problème est disparu avec .NET 4.0.