2013-10-21 108 views
5

好吧,我知道还有一些其他类似的问题,但我有一个真正的问题,让AlternationIndex在ListBox或ListView上工作。为什么ListBox的AlternationIndex总是返回0

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

的疯狂的事情是这只是为列表框或列表视图

只要我将其更改为一个ItemsControl索引是正确的,但我不想要一个项目控件,我想要一个列表框与它随附的所有功能。

如果您有任何想法可能会发生这种情况,我会很感激您的帮助。

感谢

基兰

回答

13

对于ListBoxListView你必须找到对ListBoxItem/ListViewItem如下属性:

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

但对于ListBoxListBoxItem是项目容器和DataTemplate将由ContentPresenterListBoxItemTemplate加载。所以ListBoxItemItemsControl.AlternationIndex属性的值将根据索引而改变,但的ItemsControl.AlternationIndex属性的值加载DataTemplate将始终为0,这是默认值。

+0

好的,这是有道理的,引用ListBoxItem完美的作品,谢谢。 – Kezza

相关问题