【问题标题】:MouseEnter trigger fires inaccurately on items in ListBoxMouseEnter 触发器在 ListBox 中的项目上触发不准确
【发布时间】:2011-04-06 20:45:29
【问题描述】:

我在 WPF 列表框中看到了一个非常奇怪的问题,其中每个项目的 MouseEnter 触发器对于我的 ListBox 中更下方的项目的触发不太准确。我的 MouseEnter 触发器触发了增加每个项目的 ScaleTransform 的动画。

示例:我有一个包含 10 个项目的列表框。列表框显示前 5 个项目。我将鼠标悬停在第一个项目上,它可以很好地缩放。我将鼠标悬停在第二个项目上,我必须将鼠标放在列表项控件内更远的地方才能看到效果。我将鼠标悬停在第三个项目上,我必须将鼠标放在更远的位置。当我到达列表中的最后一个(第 5 个)可见项目时,我必须将鼠标放在控件的中点左右MouseEnter 开火。然后,我向下滚动到底部以查看项目 6-10。项目#6 悬停就好了。 #7 不太准确,#8 甚至更不准确,依此类推,直到 #10 非常不准确。

因此看起来列表框中的垂直可见位置会影响每个控件的 MouseEnter 精度。

编辑:当我将此代码放在一个干净的 XAML 窗口中时,它可以正常工作。这一定是我提供的代码之外的一些冲突......如果我发现了什么,我会提供更多细节(或答案)。

有什么可能导致这种情况的想法吗?

这是我的 ListBox XAML:

<ListBox
    MaxHeight="530"
    ItemsSource="{Binding Appointments}"
    Background="Transparent"
    >
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <views:AppointmentControl DataContext="{Binding}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这是我的 AppointmentControl 的样子:

<UserControl Height="155" Width="215">
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Mouse.MouseEnter">
            <BeginStoryboard>
                <Storyboard TargetProperty="RenderTransform.ScaleX">
                    <DoubleAnimation To="1.2" Duration="0:0:0.050" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="Mouse.MouseLeave">
            <BeginStoryboard>
                <Storyboard TargetProperty="RenderTransform.ScaleX">
                    <DoubleAnimation To="1.0" Duration="0:0:0.050" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>

    <UserControl.RenderTransform>
        <ScaleTransform ScaleX="1.0" ScaleY="1.0"></ScaleTransform>
    </UserControl.RenderTransform>

    <Button
        Background="#FFCAEE7D" 
        BorderThickness="1,1,1,3" 
        Padding="0"
        >
        <StackPanel Height="125" Width="180">
            <TextBlock ... />
            <TextBlock ... />

            <ItemsControl>
                ...
            </ItemsControl>
        </StackPanel>
    </Button>
</UserControl>

【问题讨论】:

  • 那么,如果您有 5 个可见项目,并且您从底部项目开始并向上移动列表会发生什么?
  • 什么是“从底部开始”?首先将鼠标悬停在底部的项目上,然后一直到第一个项目?如果是这样,那么我仍然有同样的问题。

标签: wpf xaml styles


【解决方案1】:

如果从第五个元素开始输入 ListBox 会发生什么?还需要下到一半才能看到同样的效果吗?

【讨论】:

  • 我有问题,即使第五个元素是我悬停的第一个项目。
【解决方案2】:

问题在于列表框顶部具有更大 z-index 的另一个控件干扰了列表项命中测试。另一个控件有一个所谓的透明区域,但无论出于何种原因,它都会干扰 mouseenter。当我删除这个其他控件时,问题就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多