Как применить Setter Set для ListBoxItems определенного DataType? - PullRequest
2 голосов
/ 25 сентября 2011

Мой WPF ListBox содержит два типа объектов: продукт и бренд.

Я хочу, чтобы мои продукты выбирались .Я хочу, чтобы мои бренды не выбирались .

Каждый из двух типов имеет свой собственный шаблон данных.

По умолчанию можно выбрать что угодно :

<ListBox ... >
    <ListBox.Resources>
        <DataTemplate DataType="{x:Type local:Product}">
            ...
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:Brand}">
            ...
        </DataTemplate>
    </ListBox.Resources>
</ListBox>

Я могу установить Фокусируемость с помощью Сеттера, но тогда можно выбрать Ничего :

<ListBox ... >
    <ListBox.Resources>
        ...
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="Focusable" Value="False" />
        </Style>
    </ListBox.Resources>
</ListBox>

Я не могу поместить Сеттер в DataTemplate.

Я не могу поместить DataType в стиль.

Как мне стилизовать только элементы ListBoxItems типа Brand?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011

Благодаря классу StyleSelector вы можете прикреплять стили в зависимости от типа данных для ItemContainerStyle.Вот действительно хороший пример: http://www.telerik.com/help/wpf/common-data-binding-style-selectors.html

1 голос
/ 25 сентября 2011

Можете ли вы использовать триггер данных в своем стиле ListBoxItem?Если это так, свяжите его с DataContext (ваш класс) и используйте преобразователь значений для проверки типа.Если это тот, который вас интересует, стилизуйте ListBoxItem так, чтобы он не выглядел выделенным.

Я не думаю, что вы можете запретить выделение элемента в Selector (родительском элементе ListBox) без кода илипользовательское поведение.

...