7

わかりました、これと同様の質問が他にもいくつかあることは知っていますが、AlternationIndex を ListBox または ListView で機能させるには実際の問題があります。

私のxamlはそのようなものです:

            <ListBox BorderThickness="0" Name="RecentItemsListBox" HorizontalAlignment="Stretch"
                     ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                     ItemsSource="{Binding Path=RecentFilesList}" AlternationCount="100">
                <ListBox.ItemsPanel>

                    <ItemsPanelTemplate>
                        <WrapPanel />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>

                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Path=(ItemsControl.AlternationIndex), 
                                    RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource IncCnvrtr}}" 
                                       Foreground="DimGray" FontSize="20" FontWeight="Bold"  
                                       HorizontalAlignment="Left" Margin="5,5,15,5" />
                            <StackPanel VerticalAlignment="Center">
                                <TextBlock Text="{Binding ClassName}" Foreground="Black" />
                                <TextBlock Text="{Binding DisplayName}" Foreground="Black" />
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

コンバーターは値を 1 ずつ増やします。これは正常に機能し、コンバーターに送信される値が常に 0 であることを確認するためにデバッグしました。

クレイジーなことは、これは ListBox または ListView のみです。

それを ItemsControl に変更するとすぐに、インデックス作成は正しくなりますが、項目コントロールは必要ありません。付属のすべての機能を備えたリスト ボックスが必要です。

なぜこれが起こっているのかについて何か考えがあれば、私はあなたの助けに感謝します.

ありがとう

キーラン

4

1 に答える 1

22

ListBoxまたは、以下のように/ListViewでプロパティを見つける必要があります。ListBoxItemListViewItem

     <TextBlock Text="{Binding Path=(ItemsControl.AlternationIndex), 
                       RelativeSource={RelativeSource AncestorType=ListBoxItem}, Converter={StaticResource IncCnvrtr}}" 
                       Foreground="DimGray" FontSize="20" FontWeight="Bold"  
                        HorizontalAlignment="Left" Margin="5,5,15,5" />

違いはItemsControl、アイテムのコンテナになる単一の ContentPresenter のみを生成し、同じ ContentPresenter が DataTemplate もロードしているという事実によるものです。

しかし、ListBox の場合ListBoxItemsはアイテム コンテナーであり、DataTemplate は ContentPresenter によって Template の Template に読み込まれますListBoxItem。したがって、ListBoxItemのプロパティItemsControl.AlternationIndexの値はインデックスに応じて変化しますが、をロードするのItemsControl.AlternationIndexプロパティの値は常に 0 (デフォルト値) になります。ContentPresenterDataTemplate

于 2013-10-21T10:13:45.287 に答える