我有一个ListBox,当鼠标移到项目上时,它会显示该项目的删除按钮。问题是,IsMouseOver在高亮显示的项目中触发了大约4个像素,所以当鼠标移到多个项目上时,它会在项目之间的空隙中闪烁,而不是看起来像是随着你上下移动的删除按钮。有没有办法让IsMouseOver对整个项目做出响应?
<ListBox Name="lstLength" ItemsSource="{Binding Source={StaticResource lengths}}">
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel LastChildFill="True" Height="22">
<Button DockPanel.Dock="Right" Name="btnDelete" Content="X" Tag="{Binding}" Click="DeleteLength" Visibility="Collapsed" />
<TextBlock Text="{Binding}" />
</DockPanel>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="btnDelete" Property="Visibility" Value="Visible" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>发布于 2011-08-16 19:12:14
你的每一个项目都将包含在一个ListBoxItem中,这就是为什么每个项目之间有~4个像素。它还提供了高亮显示和选择样式。您可以通过ListBox.ItemContainerStyle属性设置listBoxItem的样式。将触发器移动到项容器,它应该可以按需工作。
发布于 2011-08-16 19:34:35
您可以直接在按钮上使用DataTrigger (或者尝试在它所在的位置应用相同的RelativeSource绑定):
<Style TargetType="{x:Type Button}">
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
Value="True">
<!-- ... -->
</DataTrigger>
</Style>https://stackoverflow.com/questions/7077205
复制相似问题