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;
我基于假设提出上述解决方案,如果这不是您想要的,请纠正我。您是否可以共享该应用程序的示例?从这个片段中理解起来有点困难。我很难分享这个应用程序的一个示例,因为整个应用程序相当复杂。我相信这段话很好地描述了我的问题,如果你想了解细节,我很乐意回答。