2014-01-15 6 views
2

Мой код XAML создаст ярлыки в WPF window. Как я могу сделать каждый контент Label? Его позиция от ItemSource?Получить текущий индекс привязки

В настоящее время, результат: AAABBBCC (они 3 этикетки)

Что я хочу: 123 (Они 3 label или, может быть 012, так как базовый индекс на 0)

<ItemsControl Name="m_Header"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <Label Margin="-2,0,0,0" 
       Width="{Binding Path=Columns[0].ActualWidth, ElementName=m_DataGrid}" 
       Content="{Binding}" FontSize="15" Foreground="#777" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+1

Похоже, вы пытаетесь создать заголовок DataGrid. Обратите внимание, что есть свойство [DataGridColumn.Header] (http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcolumn.header.aspx), – Clemens

ответ

1

Не имеет значения Index, определенного в классе ItemsControl, поэтому нет способ показать это значение. Однако есть трюк, который вы можете использовать, чтобы получить то, что хотите. Если свойство ItemsControl.AlternationCount устанавливается в соответствующим высоким числом, то вы можете использовать ItemsControl.AlternationIndex свойство делать то же самое для вас:

<ItemsControl AlternationCount="999"><!--Set this as high as you need--> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <Label Margin="-2,0,0,0" Width="{Binding Path=Columns[0].ActualWidth, 
ElementName=m_DataGrid}" Content="{(ItemsControl.AlternationIndex), RelativeSource={ 
RelativeSource TemplatedParent}}" FontSize="15" Foreground="#777" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Если вы хотите цифры, чтобы начать с другого номера, вы можете добавить Converter, чтобы просто добавить или вычесть соответствующее значение из каждого номера.

+0

Это работает :) Большое спасибо –

0

Добавление к ответу @sheridan.

В зависимости от вашего основного источника данных, вы могли бы использовать свойство подсчета источник поставил перед AlternationCount

Model

public class DemoViewModel { 
    public ObservableCollection<string> Products { get; set; } 
    } 

Настройка DataContext

public MainWindow() { 
     InitializeComponent(); 

     var vm = new DemoViewModel(); 
     vm.Products = new ObservableCollection<string> { "elm", "oak", "pine" }; 
     this.DataContext = vm; 
    } 

XAML

<ItemsControl AlternationCount="{Binding Products.Count}" 
       ItemsSource='{Binding Products}'> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <StackPanel Orientation='Vertical'> 
      <Label Margin="2" Width='200' 
       Content="{Binding (ItemsControl.AlternationIndex), RelativeSource={ 
RelativeSource TemplatedParent}}" 
       Foreground="#777" /> 
      <TextBlock Text='{Binding}' /> 
     </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Результаты

enter image description here

+0

Это работает :) Большое спасибо –

0

Все выше код работы большой :).

Как изменить Binding Path=Columns[0] к Binding Path=Columns[index_here]

Это в Width="{Binding Path=Columns[0].ActualWidth, ElementName=m_DataGrid}"

Смежные вопросы