MouseEnter触发器在ListBox中的项目上不准确地触发

时间:2011-04-06 20:45:30

标签: wpf xaml styles

我在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>

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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