2010-07-19 16 views
5

Qualcuno sa perché questo produrrebbe un XamlParseException "Impossibile aggiungere il contenuto di tipo 'System.Windows.Controls.ContextMenu' a un oggetto di tipo 'System.Object'":ContextMenu in stile setter

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

E il seguente funziona bene?

<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

che è strano. Il valore deve prevedere qualcosa, ma non vedo perché ciò causerebbe un'eccezione ... Se questo è in Expression Blend, potrebbe valere la pena riaprire tutto perché può riprodurre a volte –

+0

in Visual Studio 2008 mentre l'applicazione viene eseguita, ho spostato il menu di scelta rapida in risorse e funziona, ma penso che dovrebbe funzionare anche con il setter, forse è un bug – serine

+1

Questo è effettivamente lo stesso problema con [questa domanda] (http: // StackOverflow. com/domande/1495489/non-a-set-system-windows-controlli-menuitem-icona-thru-a-setter). – CodeNaked

risposta

0

Sembra un bug che da allora è stato fissato - il codice in questione genera un'eccezione XAML parse quando si mira .NET 3.5, ma funziona bene per me quando il targeting di .NET 4.0. Se segui il collegamento fornito nei commenti sopra, troverai un problema di connessione con commenti di altri che indicano che il problema è andato via con .NET 4.0.