如何禁用选择InkCanvas特定子项的可能性?

时间:2014-06-21 21:52:36

标签: c# .net wpf

我正在使用InkCanvas而我正试图禁用其特定孩子的选择。 InkCanvas子集合包含EliipsePath个对象,我想禁用选择所有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返回感兴趣的对象)。你知道怎么做这个吗?

1 个答案:

答案 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;

我基于假设提出上述解决方案,如果这不是你想要的,请纠正我。

相关问题