Обычно ListBox
является не , ответственным за содержание самих предметов, включая то, какого цвета Foreground
, если необходимо, они используют.Предметы могут представлять собой серию изображений, в этом случае Foreground
не имеет смысла.Предметы могут быть сложным многоэлементным пользовательским интерфейсом, содержащим различные текстовые элементы, каждый из которых нуждается в разных Foreground
цветах, поэтому снова идея ListBox
, предоставляющая один Foreground
цвет, не имеет смысла.в шаблоне по умолчанию для контейнера Item используется ContentPresenter
, что в основном означает «размещать здесь содержимое произвольного элемента».
Если вы хотите создать новый стиль для списков в целом, чтобы использовать их для стилей элементов контейнератогда вам придется принять это ограничение, ваш VSM не может знать подробности содержимого элемента.
Однако, если вы создаете стиль контейнера для конкретного экземпляра ListBox
и понимаете тип и природуэлементы, представленные тогда, вам не нужно хранить ContentPresenter
в шаблоне.Вы можете заменить любой Xaml, который вам нужен, чтобы представить каждый элемент.
Например, вы можете заменить ContentPresenter
в Xaml следующим: -
<Grid Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
<TextBlock x:Name="ContentItem" Text="{Binding Property1, Mode=OneWay}" TextWrapping="Wrap" Foreground="#FFDC1C1C"/>
</Grid>
Обратите внимание, что Paddingи горизонтальное выравнивание элементов такое же, как и у докладчика.В этом случае я использую как одиночный TextBlock
с именем «ContentItem» и связываю его со свойством Property1
исходных объектов.
Теперь, когда шаблон содержит имя TextBlock
для отображения элемента, яможет поиграться с VSM, чтобы изменить его Foreground
для различных визуальных состояний.