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测试中返回。为什么?
VisualTreeHelper
不考虑IsHitTestVisible
。
如果你想从VisualTreeHelper
的命中测试中省略TextBlock
,那么你应该通过过滤器回调到HitTest()