【问题标题】:ContextMenu in Style setter样式设置器中的 ContextMenu
【发布时间】:2011-03-17 20:17:05
【问题描述】:

有谁知道为什么这会产生 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>

【问题讨论】:

  • 这很奇怪。必须与 Value 期望一个对象有关,但我不明白为什么会导致异常...如果这是在 Expression Blend 中,则可能值得重新打开所有内容,因为它有时会播放
  • 它在 Visual Studio 2008 中执行应用程序时,我将上下文菜单移动到资源并且它工作但我认为它也应该与 setter 一起工作,也许它是一个错误
  • 这实际上与this question 的问题相同。

标签: wpf contextmenu styles


【解决方案1】:

看起来像一个已经修复的错误 - 有问题的代码在面向 .NET 3.5 时会生成 XAML 解析异常,但在面向 .NET 4.0 时对我来说效果很好。如果您点击上面 cmets 中提供的链接,您会发现来自其他人的 cmets 的连接问题表明该问题已在 .NET 4.0 中消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多