C# 在WPF中选择时更改列表框项目样式
我不完全确定我做的不对,但我的风格触发器似乎没有被识别。我想在选择列表框项目时更改笔划的颜色C# 在WPF中选择时更改列表框项目样式,c#,wpf,C#,Wpf,我不完全确定我做的不对,但我的风格触发器似乎没有被识别。我想在选择列表框项目时更改笔划的颜色 <ListBox ItemsSource="{Binding CityList}" DisplayMemberPath="Name" SelectionMode="Extended" VirtualizingPanel.IsVirtualizing="true" VirtualizingPanel.VirtualizationMo
<ListBox ItemsSource="{Binding CityList}" DisplayMemberPath="Name" SelectionMode="Extended"
VirtualizingPanel.IsVirtualizing="true"
VirtualizingPanel.VirtualizationMode="Recycling"
Background="Brown">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Canvas.Left" Value="{Binding Longitude, Converter={StaticResource longValueConverter}, ConverterParameter={StaticResource mapWidth}}"/>
<Setter Property="Canvas.Top" Value="{Binding Latitude, Converter={StaticResource latValueConverter}, ConverterParameter={StaticResource mapHeight}}"/>
<Setter Property="BorderThickness" Value="3" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Ellipse x:Name="indicator"
Fill="#FF000000"
Height="10"
Width="10"
Stroke="Transparent"
StrokeThickness="2"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="indicator" Property="Stroke" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True"
Width="{StaticResource mapWidth}"
Height="{StaticResource mapHeight}"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
您不能在样式设置器中使用
TargetName
不必设置ContentTemplate属性,您可以设置Template属性并将触发器添加到ControlTemplate.Triggers
集合:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid>
<Ellipse x:Name="indicator"
Fill="#FF000000"
Height="10"
Width="10"
Stroke="Transparent"
StrokeThickness="2"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="indicator" Property="Stroke" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
您还可以将ContentPresenter添加到ControlTemplate的网格中,该网格将显示ItemTemplate的元素(如果您以后决定声明一个元素)。您不能在样式设置器中使用
TargetName
不必设置ContentTemplate属性,您可以设置Template属性并将触发器添加到ControlTemplate.Triggers
集合:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid>
<Ellipse x:Name="indicator"
Fill="#FF000000"
Height="10"
Width="10"
Stroke="Transparent"
StrokeThickness="2"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="indicator" Property="Stroke" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
您还可以将ContentPresenter添加到ControlTemplate中的网格中,该网格将显示ItemTemplate的元素(如果您以后决定声明一个元素)。根据文档中此页面的示例,您可以命名
笔划本身,并使用setter将其作为目标@Tim您不能在样式设置器中使用TargetName。@克莱门斯,那么这就是问题的答案,因为他肯定已经在使用了。@问题中的Tim XAML不会编译……请注意,VirtualzingPanel属性没有任何效果,因为您将画布用作ItemsPanel。此外,DisplayMemberPath将不起作用。根据文档中此页面的示例,看起来您可以命名笔划
本身,并使用setter将其作为目标@Tim您不能在样式设置器中使用TargetName。@克莱门斯,那么这就是问题的答案,因为他肯定已经在使用了。@问题中的Tim XAML不会编译……请注意,VirtualzingPanel属性没有任何效果,因为您将画布用作ItemsPanel。此外,DisplayMemberPath将不起作用。