2013-10-21 19 views
5

Ok, tôi biết có một số câu hỏi tương tự khác cho vấn đề này nhưng tôi đang gặp vấn đề thực sự khi sử dụng AlternationIndex để làm việc trên ListBox hoặc ListView.Tại sao ListBox AlternationIndex luôn trả về 0

XAML của tôi là như vậy:

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

bộ chuyển đổi tăng giá trị bằng 1. Điều này hoạt động tốt và tôi đã sửa lỗi nó để xác nhận giá trị được gửi đến bộ chuyển đổi được LUÔN 0.

Các điều điên rồ là điều này chỉ dành cho ListBox hoặc ListView

ngay sau khi tôi thay đổi nó thành một ItemsControl việc lập chỉ mục là chính xác nhưng tôi không muốn điều khiển mục, tôi muốn một hộp danh sách với tất cả các tính năng đi kèm với nó .

Nếu bạn có bất kỳ ý tưởng nào về lý do tại sao điều này có thể xảy ra, tôi sẽ rất biết ơn sự giúp đỡ của bạn.

Cảm ơn

Kieran

Trả lời

13

Đối ListBox hoặc ListView bạn sẽ phải tìm ra tài sản trên ListBoxItem/ListViewItem như sau:

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

Sự khác biệt là do thực tế là ItemsControl chỉ tạo một ContentPresenter duy nhất trở thành Vùng chứa của một mục và cùng một số ContentPresenter cũng đang tải DataTemplate.

Nhưng đối với ListBox, ListBoxItem là những container hàng và DataTemplate sẽ được nạp bởi ContentPresenter trong Template của ListBoxItem. Vì vậy, giá trị của ListBoxItem thuộc tính ItemsControl.AlternationIndex sẽ thay đổi theo chỉ mục nhưng giá trị của thuộc tính ItemsControl.AlternationIndex của ContentPresenter tải DataTemplate sẽ luôn bằng 0, là giá trị mặc định.

+0

ok, điều đó có ý nghĩa, việc tham chiếu ListBoxItem hoạt động hoàn hảo, cảm ơn. – Kezza

Các vấn đề liên quan