首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ListBoxItem IsMouseOver

WPF ListBoxItem IsMouseOver
EN

Stack Overflow用户
提问于 2011-08-16 19:05:34
回答 2查看 3.7K关注 0票数 3

我有一个ListBox,当鼠标移到项目上时,它会显示该项目的删除按钮。问题是,IsMouseOver在高亮显示的项目中触发了大约4个像素,所以当鼠标移到多个项目上时,它会在项目之间的空隙中闪烁,而不是看起来像是随着你上下移动的删除按钮。有没有办法让IsMouseOver对整个项目做出响应?

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2011-08-16 19:12:14

你的每一个项目都将包含在一个ListBoxItem中,这就是为什么每个项目之间有~4个像素。它还提供了高亮显示和选择样式。您可以通过ListBox.ItemContainerStyle属性设置listBoxItem的样式。将触发器移动到项容器,它应该可以按需工作。

票数 1
EN

Stack Overflow用户

发布于 2011-08-16 19:34:35

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

代码语言:javascript
复制
<Style TargetType="{x:Type Button}">
    <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}"
                 Value="True">
          <!-- ... -->
    </DataTrigger>
</Style>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7077205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档