WPF DataTemplate изменения для объекта ListBox, если выбрано

88
задан Vertexwahn 4 March 2016 в 16:08
поделиться

2 ответа

Самый легкий способ сделать это должно предоставить шаблон для "ItemContainerStyle" а НЕ свойства "ItemTemplate". В коде ниже я создаю 2 шаблона данных: один для "отменявшего" и один для "выбранных" состояний. Я тогда создаю шаблон для "ItemContainerStyle", который является фактическим "ListBoxItem", который содержит объект. Я установил значение по умолчанию "ContentTemplate" на "Отменявшее" состояние, и затем предоставляю триггер, который выгружает шаблон, когда свойство "IsSelected" верно. (Отметьте: Я устанавливаю свойство "ItemsSource" в коде позади к списку строк для простоты)

<Window.Resources>

<DataTemplate x:Key="ItemTemplate">
    <TextBlock Text="{Binding}" Foreground="Red" />
</DataTemplate>

<DataTemplate x:Key="SelectedTemplate">
    <TextBlock Text="{Binding}" Foreground="White" />
</DataTemplate>

<Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle">
    <Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" />
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}" />
        </Trigger>
    </Style.Triggers>
</Style>

</Window.Resources>
<ListBox x:Name="lstItems" ItemContainerStyle="{StaticResource ContainerStyle}" />
178
ответ дан Micah 24 November 2019 в 07:30
поделиться

Это должно также быть отмечено, что stackpanel не focuable, таким образом, это никогда не собирается добираться, фокус (установите Focusable=True, если Вы/really/хотите сфокусированный). Однако ключ для запоминания в сценариях как это - то, что Stackpanel ребенок из TreeViewItem, который является ItemContainer в этом случае. Как Micah предполагает, настраивание itemcontainerstyle является хорошим подходом.

Вы могли, вероятно, сделать это использование DataTemplates и вещи, такие как datatriggers, который будет использовать расширение разметки RelativeSouce для поиска listviewitem

6
ответ дан Dominic Hopton 24 November 2019 в 07:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: