ListBoxItem создан по шаблону без ContentPresenter?

Можно ли создать шаблон ListBoxItem, чтобы в визуальном дереве не отображался ContentPresenter, и у меня был непосредственно шаблон данных под ListBoxItem?


person Gerard    schedule 11.03.2014    source источник


Ответы (1)


Вы можете заменить стиль ListBoxItem на тот, который не имеет ContentPresenter, например этот самый простой:

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <TextBlock Text="{Binding}"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

Для более реалистичного стиля вы можете скопировать стиль ListBoxItem по умолчанию из здесь и замените ContentPresenter на то, что соответствует вашим потребностям.

person Clemens    schedule 11.03.2014
comment
Когда я использую такой шаблон, шаблоны данных не применяются к элементам. - person Gerard; 11.03.2014
comment
Конечно, нет, потому что именно для этого существует ContentPresenter. Когда контейнер элементов (например, ListBoxItem) подготовлен для отображения элемента данных, ItemTemplate ItemsControl (например, ListBox) применяется к свойству ContentTemplate ContentPresenter. См. раздел «Примечания» в Документация MSDN ItemTemplate для получения более подробной информации. - person Clemens; 11.03.2014