样式设置器中的上下文菜单

6

有人知道为什么这会产生XamlParseException异常 "无法将类型为 'System.Windows.Controls.ContextMenu' 的内容添加到类型为 'System.Object' 的对象中吗?"

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

以下内容没有问题吗?
<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>

这很奇怪。一定是与期望对象的值有关,但我不明白为什么会引发异常... 如果这是在Expression Blend中,重新打开所有内容可能会有所帮助,因为有时它会出现问题。 - Ed Ayers
在 Visual Studio 2008 中,当应用程序执行时,我将上下文菜单移动到了资源中,它可以工作,但我认为应该也可以使用设置器,可能是个 Bug。 - serine
1
这实际上是与此问题相同的问题。 - CodeNaked
1个回答

0
看起来是一个已经修复的 bug - 相关代码在针对 .NET 3.5 时会生成 XAML 解析异常,但当我针对 .NET 4.0 时可以正常工作。如果你按照上面评论中提供的链接,你会发现一个连接问题,并有其他人的评论表明该问题已经在 .NET 4.0 中消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接