我在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>
答案 0 :(得分:0)
如果从第五个元素开始输入ListBox会发生什么?你还需要走一半才能看到同样的效果吗?
答案 1 :(得分:0)
问题是列表框顶部的另一个具有更大z-index的控件干扰了列表项命中测试。另一个对照有一个据称是透明的区域,但无论出于什么原因它都干扰了mouseenter。当我删除这个其他控件时,问题就消失了。