У меня есть ListBox. Теперь я хочу написать DataTemplate таким образом, чтобы у первого элемента был красный фон и белый фон для других элементов. Думаю, мне нужно написать DataTrigger, но я понятия не имею, как определить, что DataTemplate применяется к первому элементу.
Как определить индекс текущего элемента ListBox из DataTemplate?
Ответы (1)
элементы управления элементами имеют счетчик чередования, который вы используете для стилизации против
посмотрите здесь:
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="LightBlue"></Setter>
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGreen"></Setter>
</Trigger>
</Style.Triggers>
</Style>
Наслаждайтесь!
person
Aran Mulholland
schedule
15.11.2009
Это отличная функция, спасибо за информацию. Но мне нужен только первый элемент с красным фоном, а не каждый элемент, где (itemIndex% AlternationCount) == 0. Конечно, я могу привязать AlternationCount к ItemsSource.Count, но нет ничего лучше как это сделать?
- person levanovd; 15.11.2009
то, что вы обрисовываете, звучит приемлемо, все в xaml. он выполняет свою работу, и вы можете двигаться дальше к лучшему. кто-то другой может предложить более элегантное решение. вы можете выполнить мульти-привязку с первой привязкой привязки к текущему элементу, а второй привязкой к предку, привязкой к источнику элементов списка. тогда в вашем конвертере вы можете проверить, каков индекс элемента. но ваше решение выше находится в xaml. Я всегда за удобочитаемость. это на виду в xaml, а не заперто в конвертере
- person Aran Mulholland; 15.11.2009
Нет необходимости связывать AlternationCount с ItemsSource.Count: просто установите для него значение Int32.MaxValue в XAML. (Я предпочитаю AlternationCount = 2147483647, а не использовать {x: Static sys: Int32.Maxvalue}, поскольку он быстрее и 2 ^ 31-1 распознается большинством программистов).
- person Ray Burns; 16.11.2009