【发布时间】: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 个可见项目,并且您从底部项目开始并向上移动列表会发生什么?
-
什么是“从底部开始”?首先将鼠标悬停在底部的项目上,然后一直到第一个项目?如果是这样,那么我仍然有同样的问题。