据我所知,在 WPF 中没有与该状态等效的东西。
WPF ListBoxItem 具有 states和Unselected
in group以及statesSelected
和in group 。每个组中的状态是相互排斥的,但来自不同组的状态可以同时进行。例如,ListBoxItem 可以同时处于状态。SelectedUnfocused
SelectionStates
Normal
MouseOver
Disabled
CommonStates
Selected
MouseOver
由控制模板定义考虑这一事实的可视化。例如,它可以在选中项目时使用不同的背景画笔填充项目,并在鼠标悬停在项目上时绘制外边框。重要的是有独立的可视化同时可见,因为相关的状态是独立的,可以同时进行。当一个选定的列表项看起来不被选中时,用户通常会感到有点困惑,因为他将鼠标移到该项目上。
编辑 - 下面的列表框示例。使用触发器而不是视觉状态可能会更容易完成。
<ListBox SelectionMode="Extended">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Background="LightGray" Margin="1">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="Disabled"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="UnselectedText"
Storyboard.TargetProperty="Foreground.Color"
To="Blue" Duration="0:0:0.1"/>
<ColorAnimation Storyboard.TargetName="SelectedText"
Storyboard.TargetProperty="Foreground.Color"
To="Red" Duration="0:0:0.1"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected"/>
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="UnselectedText"
Storyboard.TargetProperty="Opacity"
To="0" Duration="0:0:0.1"/>
<DoubleAnimation Storyboard.TargetName="SelectedText"
Storyboard.TargetProperty="Opacity"
To="1" Duration="0:0:0.1"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<TextBlock Name="UnselectedText" Margin="2" Text="{TemplateBinding Content}">
<TextBlock.Foreground>
<SolidColorBrush Color="Black"/>
</TextBlock.Foreground>
</TextBlock>
<TextBlock Name="SelectedText" Margin="2" Text="{TemplateBinding Content}" Opacity="0">
<TextBlock.Foreground>
<SolidColorBrush Color="White"/>
</TextBlock.Foreground>
</TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Items>
<ListBoxItem Content="Item 1"/>
<ListBoxItem Content="Item 2"/>
<ListBoxItem Content="Item 3"/>
<ListBoxItem Content="Item 4"/>
<ListBoxItem Content="Item 5"/>
<ListBoxItem Content="Item 6"/>
<ListBoxItem Content="Item 7"/>
<ListBoxItem Content="Item 8"/>
<ListBoxItem Content="Item 9"/>
<ListBoxItem Content="Item 10"/>
</ListBox.Items>
</ListBox>