C# 奇数XAML错误:'&引用;System.Windows.StaticResourceExtension“;无法应用';
我使用以下XAML提供了一个最近的文档菜单,如VS2012的文件>最近的文档菜单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}"
<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的后盾,所以谢谢你(我显然还有一段路要走!)。总是很乐意帮忙:)