我正在使用InkCanvas
而我正试图禁用其特定孩子的选择。 InkCanvas
子集合包含Eliipse
和Path
个对象,我想禁用选择所有Path
个对象的可能性。我试图通过检查鼠标是否在PreviewMouseLeftButtonDown
事件处理程序中点击特定对象来实现它:
private void myCanvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point downPosition = e.GetPosition(myCanvas);
UIElement element = myPath;
if (myCanvas.InputHitTest(downPosition) == element) e.Handled = true;
}
现在我知道它不会起作用,因为InputHitTest
函数会返回InkCanvas
选择装饰器,如果我再次点击该对象,当它已经在函数上方被选中时(在至少InputHitTest
返回感兴趣的对象)。你知道怎么做这个吗?
答案 0 :(得分:1)
到目前为止,我可以看到你想要在点击画布时不要选择特定的inkcanvas子项
所以假设你有一个名为myPath的路径
private void InkCanvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point downPosition = e.GetPosition(myPath);
if (myPath.InputHitTest(downPosition) == myPath)
e.Handled = true;
}
所以直接在路径上进行命中测试并查看它是否返回,然后你可以确定路径上的点击,然后通过设置e.Handled = true来使事件消耗,因此不会选择元素。
替代方法将使用null进行测试,这将具有与上面相同的行为,因此取决于选择
if (myPath.InputHitTest(downPosition) != null)
e.Handled = true;
我基于假设提出上述解决方案,如果这不是你想要的,请纠正我。