WPF为什么listviewitem没有出现在VisualTreeHelper.HitTest结果列表中?

时间:2014-02-27 20:24:08

标签: c# wpf xaml

我有一个例子,您可以在窗口上点击测试。但是,即使我单击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;
    }
  }

0 个答案:

没有答案