我想将WPF路径添加到InkCanvas
并使用选择来选择WPF路径。
所以,我使用这段代码。
System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
inkCanvas.Children.Add(path);
这是输出。我必须从0,0中选择WPF路径,因为Actualwidth
和ActualHeight
从0,0开始。
如何选择绝对WPF路径?
由于
修改
现在,我可以使用此代码完全选择它。
System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
path.Margin = new Thickness(-getMinX(path), -getMinY(path), 0, 0);
containPath.Children.Add(path);
containPath.Width = getMaxX(path) - getMinX(path);
containPath.Height = getMaxY(path) - getMinY(path);
containPath.Margin = new Thickness(getMinX(path), getMinY(path), 0, 0);
inkCanvas.Children.Add(containPath);
答案 0 :(得分:4)
您可以使用InkCanvas
上的UIElement.UpdateLayout Method来更新FrameworkElement.ActualWidth Property和ActualHeight
。有关为何需要这些内容的背景信息,请参阅ActualWidth
链接。
修改强>
我误解了这个问题。并非ActualWidth
和ActualHeight
为零,但其值与(0, 0)
上的InkCanvas
相关。这个问题的一个很好的解决方案是将Path
包裹在Canvas
中并使用Margin
进行定位,如下所示:
<Canvas Width="50" Height="50" Margin="200,200,0,0">
<Line
X1="0" Y1="0"
X2="50" Y2="50"
Stroke="Black"
StrokeThickness="4" />
</Canvas>
表现得像:
这种方法的缺点是用户必须套索Canvas
这是一个矩形,而不是任意形状。然而,它比套索和来源要好得多。
答案 1 :(得分:0)
对于只能通过控制点定义的元素(例如Line,Path等,而不是Rectangle,Ellipse等),当你将它添加到item控件时(我假设InkCanvas
是因为它支持选择) ,首先将画布添加到面板0,0。画布的宽度和Height
由控制点的最大X和Y坐标确定。在此之后,元素将作为此画布的子项添加。
您还会看到,只要您看到带有元素的这种行为,该元素就不会支持布局属性,如水平/垂直对齐等。
我看到的唯一方法是从路径中的坐标手动查找ActualWidth
和ActualHeight
。
修改:这取决于个人经验,而非任何文档。