2

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

最近のファイルが次のように表示されました

最近

MenuItemただし、 VS2012のようにファイル名の横に項目番号を表示したい。

  1. ファイル名A.f
  2. ファイル名B.x
  3. ファイル名C.j

などこれを行うために、コンバーターを使用することにしました。ファイル名なしで番号を取得するだけであれば、これを行うことができます。しかし、これをマルチバインディングに組み込みたいので、次のようなものを書くことができます

<MultiBinding StringFormat="{}{0}. {1}">
    <Binding Path="??"/> 
    <Binding Path="FullFileName"/>
</MultiBinding>

上に何を書いたらいいのかわからない。物事をより複雑にする index プロパティを s に追加せずに、ファイルがリストにある番号をファイル名の前に付けるにはどうすればよいですか?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>

これはうまくいきます!ただし、FILEMenuItemブロックのすべての XAML が強調表示され、コンパイル時にエラーが発生します (ただし、コードは実行され、機能します)。

タイプ "System.Windows.StaticResourceExtension" のオブジェクトは、タイプ "System.Windows.Style" を予期するプロパティに適用できません。

なぜこれが起こっているのですか、どうすれば解決できますか?

御時間ありがとうございます。


結果!

ここに画像の説明を入力

4

1 に答える 1

1

AlternationIndexこの回答のようにできるはずです

ListBoxItem のリストボックス インデックスの検索 (Visual CONtent を指定する ItemsTemplate)

は ではないため、が正しく機能しない可能性があるHeaderTemplateため、をオーバーライドする必要がある場合があります。StringFormatHeaderobjectstring

例:

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

結果:

ここに画像の説明を入力

于 2013-09-17T01:14:05.747 に答える