WPF TextBlock.IsHitTestVisible似乎不起作用

本文关键字:不起作用 IsHitTestVisible TextBlock WPF | 更新日期: 2023-09-27 18:06:54

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

我有一个程序生成的网格,每个单元格包含一个边界,每个边界的子节点是一个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从hit测试中返回。为什么?

WPF TextBlock.IsHitTestVisible似乎不起作用

VisualTreeHelper不考虑IsHitTestVisible

如果你想从VisualTreeHelper的命中测试中省略TextBlock,那么你应该通过过滤器回调到HitTest()