为什么ActualWidth和ActualHeight从0,0开始?

我想将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);
    
已邀请:
您可以使用
InkCanvas
上的UIElement.UpdateLayout方法更新FrameworkElement.ActualWidth属性和
ActualHeight
。有关为何需要这些信息的背景信息,请参阅
ActualWidth
链接。 编辑: 我误解了这个问题。并不是
ActualWidth
ActualHeight
为零,而是它们的值相对于
InkCanvas
(0, 0)
。这个问题的一个很好的解决方案是将
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
,这是一个矩形,而不是任意形状。然而,它比套索对象和原点要好得多。     
对于只能通过控制点定义的元素(例如Line,Path等对比Rectangle,Ellipse等),当你将它添加到item控件时(我假设
InkCanvas
是因为它支持选择),首先添加一个画布小组在0,0。画布的宽度和
Height
由控制点的最大X和Y坐标确定。在此之后,元素将作为此画布的子项添加。 您还会看到,只要您看到带有元素的此类行为,该元素就不会支持布局属性,如水平/垂直对齐等。 我看到的唯一方法是从路径中的坐标手动找到
ActualWidth
ActualHeight
。 编辑:这是来自个人经验,而不是来自任何文档。     

要回复问题请先登录注册