我有以下XAML
<MenuItem Header="_Recent Studies"
Height="22"
ItemsSource="{Binding RecentFiles}">
<MenuItem.Resources>
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
<Setter Property="Header" Value="{Binding FullFileName}"/>
</Style>
</MenuItem.Resources>
</MenuItem>
显示了我最近的文件,如
但是,我想在VS2012上显示文件名旁边的MenuItem
的项目编号。
- FileNameA.f
- FileNameB.x
- FileNameC.j
醇>
等。为了做到这一点,我决定使用转换器如果我只是获取没有文件名的数字我可以this。但我希望将其与多重绑定相结合,以便我可以编写类似
的内容<MultiBinding StringFormat="{}{0}. {1}">
<Binding Path="??"/>
<Binding Path="FullFileName"/>
</MultiBinding>
我不知道上面写的是什么。 如何在文件名称前加上文件在列表中的编号,而不向我的FullFileName
添加索引属性会使事情变得更复杂?
感谢您的时间。
编辑。这就是我在代码中使用以下答案的方法
<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}}"
Converter="{StaticResource IntPlusNConverter}"/>
<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>
这个有效!但是,我的FILE MenuItem
块的所有XAML都被突出显示,我得到一个编译时错误(代码运行并且正常工作!),说
“System.Windows.StaticResourceExtension”类型的对象不能应用于需要“System.Windows.Style”类型的属性。
为什么会发生这种情况,我该如何解决?
感谢您的时间。
RESULT!
答案 0 :(得分:1)
您应该可以使用此答案中的AlternationIndex
Finding Listbox Index of ListBoxItem (ItemsTemplate to specify Visual COntent)
您可能必须覆盖HeaderTemplate
,因为StringFormat
可能无法正常运行,因为Header
是object
而不是string
示例:
<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>
结果: