2

我有以下 XAML 来提供最近的文档菜单,例如 VS2012 的 FILE > Recent Documents 菜单

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

这行得通!但是,我的 FILEMenuItem块的所有 XAML 都被突出显示,并且我得到一个编译时错误(代码运行并且可以工作!),说

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

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

谢谢你的时间。

4

1 回答 1

1

尝试这样的事情

您应该能够将其Style移至任何位置ResourceDictionary,并且它仍然可以工作,您只需将其应用于MenuItem使用中的项目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>
于 2013-09-17T10:29:30.230 回答