我有一个例子,您可以在窗口上点击测试。但是,即使我单击listviewitem,它也不会在HitTestResults中列出listviewitem。相反,它列出了listviewitem中的实际文本块以及树上方的其他控件。 ListViewItem不是视觉效果吗?枚举所有结果时为什么不返回。
相反,我得到了这些最热门的结果:
Textblock,Border,Border,ScrollViewer,Border
不应该是Textblock,ListViewItem,Border,Border,ScrollViewer?
完整代码:
<Window
x:Class="TestApp.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Test="clr-namespace:TestApp"
Title="Window1" Height="900" Width="900"
Loaded="Window_Loaded"
xmlns:System="clr-namespace:System;assembly=mscorlib"
>
<ListView
x:Name="TestListView"
>
<ListViewItem x:Name="ListViewItem1">
<Label Content="HEy how are you" />
</ListViewItem>
<ListViewItem />
</ListView>
</Window>
public partial class Window1 : Window
{
public Window1()
{
BindingDataSet ds = new BindingDataSet();
this.DataContext = ds;
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.PreviewMouseDown += new MouseButtonEventHandler(Window1_PreviewMouseDown);
bool b = ListViewItem1.IsHitTestVisible;
//ItemsControl.Items.Add(new object());
}
void Window1_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
hitResultsList.Clear();
Point pt = e.GetPosition(TestListView);
VisualTreeHelper.HitTest(TestListView, null,
new HitTestResultCallback(MyHitTestResult),
new PointHitTestParameters(pt));
}
// Return the result of the hit test to the callback.
List<DependencyObject> hitResultsList = new List<DependencyObject>();
public HitTestResultBehavior MyHitTestResult(HitTestResult result)
{
// Add the hit test result to the list that will be processed after the enumeration.
hitResultsList.Add(result.VisualHit);
// Set the behavior to return visuals at all z-order levels.
return HitTestResultBehavior.Continue;
}
}