2013-10-21 28 views
5
döndürür

Tamam, bunun için birkaç benzer soru olduğunu biliyorum, ancak AlternationIndex'in ListBox veya ListView üzerinde çalışmasını sağlamakla ilgili gerçek bir sorun yaşıyorum.Neden ListBox AlternationIndex her zaman 0

benim xaml şekildedir:

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

dönüştürücü 1. Bu iyi çalışır ve ben dönüştürücü gönderilen değeri onaylamak için debug gelmiş tarafından değer DAİMA 0.

BS artırır Bu çılgın şey sadece ListBox veya ListView için

içindir. Bir ItemsControl'e değiştirdiğimde, indeksleme doğrudur ama bir öğe kontrolü istemiyorum, onunla birlikte gelen tüm özelliklere sahip bir liste kutusu istiyorum .

Bunun neden olabileceği konusunda bir fikriniz varsa, yardımlarınız için minnettar olurum.

Teşekkür

Kieran

ListBox için

cevap

13

veya ListView aşağıdaki gibi ListBoxItem/ListViewItem mülk bulmak zorunda kalacak:

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

fark ItemsControl sadece üretir gerçeği nedeniyle Bir öğenin Konteyneri olan tek bir ContentPresenter ve aynı ContentPresenter da DataTemplate'i yüklüyor.

Ama ListBox için

, ListBoxItem madde kapları ve DataTemplate ListBoxItem arasında Template yılında ContentPresenter tarafından yüklenecektir. ListBoxItem 'un ItemsControl.AlternationIndex özelliğinin değeri, dizine göre değişecek, ancakdeğerini yükleyen ContentPresenter öğesinin ItemsControl.AlternationIndex özelliğinin değeri her zaman 0 olacaktır, bu varsayılan değerdir.

+0

Tamam, bu mantıklı geliyor, ListBoxItem'e başvurmak mükemmel çalışıyor, teşekkürler. – Kezza