C# 奇数XAML错误:'&引用;System.Windows.StaticResourceExtension“;无法应用';

C# 奇数XAML错误:'&引用;System.Windows.StaticResourceExtension“;无法应用';,c#,wpf,visual-studio-2012,.net-4.5,menuitem,C#,Wpf,Visual Studio 2012,.net 4.5,Menuitem,我使用以下XAML提供了一个最近的文档菜单,如VS2012的文件>最近的文档菜单 <MenuItem Header="_FILE"> ... <MenuItem Header="_Recent Studies" ItemsSource="{Binding RecentFiles}" AlternationCount="{Binding RecentFiles.Count}"

我使用以下XAML提供了一个最近的文档菜单,如VS2012的文件>最近的文档菜单

<MenuItem Header="_FILE">
    ...
    <MenuItem Header="_Recent Studies" 
              ItemsSource="{Binding RecentFiles}" 
              AlternationCount="{Binding RecentFiles.Count}" 
              HeaderTemplate="{x:Null}">
        <MenuItem.Resources>
            <Style TargetType="{x:Type MenuItem}" 
                   BasedOn="{StaticResource {x:Type MenuItem}}">
                <Setter Property="HeaderTemplate" >
                   <Setter.Value>
                      <DataTemplate>
                         <TextBlock>
                            <TextBlock.Text>
                               <MultiBinding StringFormat="{}{0}. {1}">
                                  <Binding Path="(ItemsControl.AlternationIndex)" 
                                           RelativeSource="{RelativeSource FindAncestor, 
                                                                           AncestorType={x:Type MenuItem}}"/>
                                  <Binding Path="FullFileName"/>
                               </MultiBinding>
                            </TextBlock.Text>
                         </TextBlock>
                      </DataTemplate>
                   </Setter.Value>
                </Setter>
            </Style>
        </MenuItem.Resources>
    </MenuItem>
    <Separator/>
        <MenuItem Header="E_xit" 
                  Height="22"
                  Icon="{Binding Source={StaticResource Close}, 
                                 Converter={StaticResource drawingBrushToImageConverter}}"
                  Command="{Binding ExitCommand}" />
</MenuItem>

...
这管用!然而,我的所有文件
MenuItem
块的XAML都被突出显示,我得到了一个编译时错误(尽管代码运行正常!),说

“System.Windows.StaticResourceExtension”类型的对象不能应用于需要“System.Windows.Style”类型的属性

我正在使用.NET4.5和VS2012为什么会发生这种情况?我如何解决它?


谢谢你的时间。

试试这样的东西

您应该能够将
样式
移动到任何
资源字典
,并且它仍然可以工作,您只需使用
ItemContainerStyle将其应用到
菜单项
中的项即可

<Window.Resources>
    <Style x:Key="MyMenuStyle" TargetType="{x:Type MenuItem}" >
        <Setter Property="HeaderTemplate" >
            <Setter.Value>
                <DataTemplate>
                    <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0}. {1}">
                                <Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}"/>
                                <Binding Path="FullFileName"/>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid>
    <Menu VerticalAlignment="Top">
        <MenuItem Header="_FILE" >
            <MenuItem Header="_Recent Studies" 
                      ItemsSource="{Binding RecentFiles}"
                      AlternationCount="{Binding RecentFiles.Count}"
                      ItemContainerStyle="{StaticResource MyMenuStyle}" />
            <Separator/>
            <MenuItem Header="E_xit" Height="22" Command="{Binding ExitCommand}" />
        </MenuItem>
    </Menu>

</Grid>

试试这样的方法

您应该能够将
样式
移动到任何
资源字典
,并且它仍然可以工作,您只需使用
ItemContainerStyle将其应用到
菜单项
中的项即可

<Window.Resources>
    <Style x:Key="MyMenuStyle" TargetType="{x:Type MenuItem}" >
        <Setter Property="HeaderTemplate" >
            <Setter.Value>
                <DataTemplate>
                    <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0}. {1}">
                                <Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type MenuItem}}"/>
                                <Binding Path="FullFileName"/>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid>
    <Menu VerticalAlignment="Top">
        <MenuItem Header="_FILE" >
            <MenuItem Header="_Recent Studies" 
                      ItemsSource="{Binding RecentFiles}"
                      AlternationCount="{Binding RecentFiles.Count}"
                      ItemContainerStyle="{StaticResource MyMenuStyle}" />
            <Separator/>
            <MenuItem Header="E_xit" Height="22" Command="{Binding ExitCommand}" />
        </MenuItem>
    </Menu>

</Grid>



您是否尝试过清理和重建解决方案,甚至可能是重新启动VS,我无法在VS2013、VS2012、VS2010中复制此错误是的,我尝试过。您提到过使用引用项目本身的
ResourceDictionary
,我不确定这将如何工作,但认为这可以解决问题?如果我注释掉整个菜单项,错误就会消失。如果我只是注释掉所有的
代码,错误仍然存在…我如何将
菜单项资源
移动到资源字典中,而不影响绑定到
最近文件
对象的能力?您是否有其他
菜单项
样式,
BasedOn正在使用的解决方案
您是否尝试过清理和重建解决方案,甚至可能是VS重新启动,我无法在VS2013、VS2012、VS2010中复制此错误是的,我尝试过。您提到过使用引用项目本身的
ResourceDictionary
,我不确定这将如何工作,但认为这可以解决问题?如果我注释掉整个菜单项,错误就会消失。如果我只是注释掉所有的
代码,错误依然存在……我如何才能将
菜单项资源
移动到资源字典中,而不影响绑定到
最近文件
对象的能力?您是否有另一种
菜单项
样式,即
BasedOn
使用的样式。错误消失了,但是我的下拉列表的基本metro样式现在不起作用,我的转换器也不起作用。再次抱歉打扰您,当我可以的时候,我会提供一些代表。。。再次感谢…哦,我移除了转换器和底座,如果你重新添加它们,它应该可以工作了,我甚至都没看。对不起,又蠢了!可爱的快乐!请参见编辑以获得漂亮的结果!再次感谢你,伙计-你是一个巨大的帮助,@Marc真的让我打破了WPF和MVVM的后盾,所以谢谢你(我显然还有一段路要走!)。总是很乐意帮忙:)太好了。错误消失了,但是我的下拉列表的基本metro样式现在不起作用,我的转换器也不起作用。再次抱歉打扰您,当我可以的时候,我会提供一些代表。。。再次感谢…哦,我移除了转换器和底座,如果你重新添加它们,它应该可以工作了,我甚至都没看。对不起,又蠢了!可爱的快乐!请参见编辑以获得漂亮的结果!再次感谢你,伙计-你是一个巨大的帮助,你的@Marc真的让我打破了WPF和MVVM的后盾,所以谢谢你(我显然还有一段路要走!)。总是很乐意帮忙:)