WPF TextBlock.IsHitTestVisible似乎无法正常工作

时间:2015-08-08 12:15:55

标签: c# wpf xaml

也许我误解了它应该如何工作,但是从我读过的所有内容中我理解将IsHitTestVisible属性设置为false应该基本上使该元素"看不见&" #34;对于鼠标事件,MSDN声明此属性"声明此元素是否可能作为命中测试结果返回"。

我有一个程序生成的Grid,每个单元格都包含一个Border,每个Border的子节点都是一个TextBlock。

这就是我创建单元格的方式:

var cellBorder = new Border { BorderBrush = Brushes.LightGray, Background = Brushes.WhiteSmoke, BorderThickness = thickness };
var label = new TextBlock { Text = time.ToShortTimeString(), Foreground = Brushes.Tomato, IsHitTestVisible = false };
cellBorder.Child = label;
_grid.Children.Add(cellBorder);
Grid.SetColumn(cellBorder, j);
Grid.SetRow(cellBorder, i);

在DragMove事件处理程序中,我想更改当前单元格的背景颜色。在将TextBlock添加到边框之前,这工作正常。它看起来像这样:

    void _grid_DragOver(object sender, DragEventArgs e)
    {
        var pos = e.GetPosition(_grid);
        var result = VisualTreeHelper.HitTest(_grid, pos);

        if (result != null)
        {
            var border = result.VisualHit as Border;
            if (border != null)
                border.Background = Brushes.LightYellow;
            else if (result.VisualHit is TextBlock)
                Console.WriteLine("Textblock hit");  // Why is this happening?
        }
    }

TextBlock从命中测试返回。为什么呢?

1 个答案:

答案 0 :(得分:2)

VisualTreeHelper未考虑IsHitTestVisible

如果您想忽略TextBlock点击测试中的VisualTreeHelper,那么您应该通过filter callbacks to HitTest()