3

我有一个 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>
4

2 回答 2

1

您的每个项目都将包含在 aListBoxItem中,这就是在每个项目之间给出 ~4 像素的原因。它还提供突出显示和选择样式。listBoxItem您可以通过ListBox.ItemContainerStyle属性设置样式。将触发器移动到项目容器,它应该可以按需要工作。

于 2011-08-16T11:12:14.467 回答
1

您可以DataTrigger直接在按钮上使用 a (或尝试RelativeSource在它所在的位置应用相同的绑定):

<Style TargetType="{x:Type Button}">
    <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
                 Value="True">
          <!-- ... -->
    </DataTrigger>
</Style>
于 2011-08-16T11:34:34.817 回答