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

Hon*_*Lim 6 wpf selection inkcanvas actualwidth actualheight

我想添加WPF路径InkCanvas并使用选择来选择WPF路径.所以,我使用这段代码.

System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;    
drawCanvas.Children.RemoveAt(i);
inkCanvas.Children.Add(path);
Run Code Online (Sandbox Code Playgroud)

这是输出.我必须从0,0中选择WPF Path,因为ActualwidthActualHeight从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);
Run Code Online (Sandbox Code Playgroud)

Ric*_*key 4

您可以使用UIElement.UpdateLayout 方法InkCanvas更新FrameworkElement.ActualWidth 属性ActualHeight。请参阅ActualWidth链接以获取有关为什么需要这样做的背景信息。

编辑:

我误解了这个问题。事实并非如此ActualWidth,并且ActualHeight为零,但它们的值是相对于(0, 0)InkCanvas。解决这个问题的一个很好的解决方案是将 包裹Path在 a 中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>
Run Code Online (Sandbox Code Playgroud)

其行为如下:

替代文本

这种方法的缺点是用户必须套索Canvas矩形,而不是任意形状。尽管如此,这比必须套索对象和原点要好得多。