2013-10-21 21 views
5

Ok, ich weiß, dass es noch ein paar andere ähnliche Fragen gibt, aber ich habe ein echtes Problem damit, den AlternationIndex auf ListBox oder ListView anwenden zu können.Warum gibt ListBox AlternationIndex immer 0 zurück

meine XAML ist so:

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

der Wandler des Wert um 1 erhöht Dies funktioniert gut, und ich habe es ausgetestet um den Wert zu bestätigen, um den Wandler IMMER 0 gesendet wurde

Die Verrückte Sache ist, das ist nur für ListBox oder ListView

sobald ich es zu einem ItemsControl ändern die Indizierung ist richtig, aber ich will kein Element Kontrolle, ich möchte eine Listbox mit allen Funktionen, die damit kommen .

Wenn Sie eine Idee haben, warum dies passieren könnte, wäre ich Ihnen dankbar für Ihre Hilfe.

Dank

Kieran

Antwort

13

Für ListBox oder ListView Sie die Eigenschaft auf die ListBoxItem/ListViewItem wie unten finden haben: nur

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

Der Unterschied ist aufgrund der Tatsache, dass ItemsControl erzeugt ein einzelner ContentPresenter, der zum Container eines Artikels wird, und derselbe ContentPresenter lädt auch das DataTemplate.

Aber für ListBox, ListBoxItem sind die Elementcontainer und DataTemplate wird von den ContentPresenter in Template von ListBoxItem geladen werden. Der Wert der ListBoxItemItemsControl.AlternationIndex Eigenschaft ändert sich entsprechend dem Index, aber der Wert der ItemsControl.AlternationIndex Eigenschaft der ContentPresenter, die die DataTemplate lädt, wird immer 0 sein, was der Standardwert ist.

+0

ok, das macht Sinn, Referenzieren der ListBoxItem funktioniert perfekt, danke. – Kezza

Verwandte Themen