Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何禁用选择InkCanvas特定子级的可能性?_C#_.net_Wpf - Fatal编程技术网

C# 如何禁用选择InkCanvas特定子级的可能性?

C# 如何禁用选择InkCanvas特定子级的可能性?,c#,.net,wpf,C#,.net,Wpf,我正在使用InkCanvas,并试图禁用对其特定子项的选择InkCanvas子集合由Elipse和Path对象组成,我想禁用选择所有Path对象的可能性。我试图通过检查鼠标是否击中PreviewMouseLeftButtonDown事件处理程序中的特定对象来实现它: private void myCanvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Point downPosition

我正在使用
InkCanvas
,并试图禁用对其特定子项的选择
InkCanvas
子集合由
Elipse
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;
}

现在我知道它不起作用了,因为
inputtittest
函数返回
InkCanvas
选择装饰器,如果我再次单击该对象,当它已经被选中时,上面的函数起作用(至少
inputtittest
返回我感兴趣的对象)。你知道怎么做吗?

到目前为止,我能看到的是,你希望在单击画布时不要选择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;

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

您是否可以共享该应用程序的示例?从这个片段中理解起来有点困难。我很难分享这个应用程序的一个示例,因为整个应用程序相当复杂。我相信这段话很好地描述了我的问题,如果你想了解细节,我很乐意回答。