也许我误解了它应该如何工作,但是从我读过的所有内容中我理解将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从命中测试返回。为什么呢?
答案 0 :(得分:2)
VisualTreeHelper
未考虑IsHitTestVisible
。
如果您想忽略TextBlock
点击测试中的VisualTreeHelper
,那么您应该通过filter callbacks to HitTest()