WPF ListBoxItem IsMouseOver
У меня есть 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>
2 ответа
Вы могли бы использовать DataTrigger
прямо на кнопку (или попробуйте применить тот же RelativeSource
обязательна в том месте, где она есть)
<Style TargetType="{x:Type Button}">
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
Value="True">
<!-- ... -->
</DataTrigger>
</Style>
Каждый из ваших предметов будет содержаться в ListBoxItem
это то, что дает ~4 пикселя между каждым элементом. Это также обеспечивает выделение и выбор стиля. Вы можете стилизовать listBoxItem
через свойство ListBox.ItemContainerStyle. Переместите свой триггер в контейнер с предметами, и он должен работать как нужно.