Когда я использую ItemsControl внутри моего шаблона элемента управления ListBox, мой шаблон элемента управления ListBoxItem не применяется.
У меня есть собственный шаблон элемента управления ListBox вместе с шаблоном элемента управления ListBoxItem, обернутым в стили. В моем главном окне у меня есть объявление ListBox с шаблоном данных.
Шаблоны управления:
<Style TargetType="ListBoxItem" BasedOn="{StaticResource Base_Control_Style}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="border" BorderThickness="0"
BorderBrush="Transparent" Background="Transparent">
<ContentPresenter Content="{TemplateBinding Content}" Margin="2"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="border" Property="Background"
Value="{StaticResource Base_PrimaryLight}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True" >
<Setter TargetName="border" Property="Background"
Value="{StaticResource Base_Secondary}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter TargetName="border" Property="Background"
Value="{StaticResource Base_SecondaryDark}"/>
</MultiTrigger.Setters>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="ListBox" BasedOn="{StaticResource Base_Control_Style}">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="{StaticResource Base_PrimaryDark}"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<Border x:Name="Border" BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}">
<ScrollViewer Margin="2">
<!--<StackPanel IsItemsHost="true"/>-->
<!--<ItemsPresenter/>-->
<ItemsControl ItemsSource="{TemplateBinding ItemsSource}"
ItemTemplate="{TemplateBinding ItemTemplate}"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Объявление списка:
<ListBox x:Name="recipients_listbox" Margin="10" ItemsSource="{Binding Path=Recipients}"
SelectedValuePath="Email"
SnapsToDevicePixels="True"
HorizontalContentAlignment="Stretch" ScrollViewer.CanContentScroll="False">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="2,4" HorizontalAlignment="Stretch" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Black"/>
</Style>
</Grid.Resources>
<Image Source="{Binding ImagePath}"
RenderOptions.BitmapScalingMode="HighQuality"
SnapsToDevicePixels="True"
Grid.Column="0" Grid.Row="0" Grid.RowSpan="3"
Stretch="UniformToFill" Margin="0,0,10,0"/>
<TextBlock Text="Name:" FontWeight="Bold"
Grid.Column="1" Grid.Row="0" VerticalAlignment="Center"/>
<TextBlock Text="Email:" FontWeight="Bold"
Grid.Column="1" Grid.Row="1" VerticalAlignment="Center"/>
<TextBlock Text="Department:" FontWeight="Bold"
Grid.Column="1" Grid.Row="2" VerticalAlignment="Center"/>
<TextBlock VerticalAlignment="Center" Grid.Column="3" Grid.Row="0">
<Run Text="{Binding FirstName}"/>
<Run Text="{Binding LastName}"/>
</TextBlock>
<TextBlock Text="{Binding Email}"
VerticalAlignment="Center" Grid.Column="3" Grid.Row="1"/>
<TextBlock Text="{Binding Department}"
VerticalAlignment="Center" Grid.Column="3" Grid.Row="2"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Проблема в том, что когда я используйте ItemsControl внутри моего шаблона элемента управления ListBox, мой шаблон элемента управления ListBoxItem не применяется (триггеры, изменяющие цвет фона, не активируются), в то время как мой шаблон данных имеет вид.
ListBox with ItemsControl
Я попытался использовать StackPanel с isItemsHost = True, а также ItemsPresenter. Оба эти параметра применили мой шаблон элемента управления ListBoxItem, но не применили мой шаблон данных.
ListBox с StackPanel или ItemsPresenter
Есть ли способ применить и мой элемент управления ListBoxItem, и шаблон данных?