在 Canvas 上绘图未正确保存 WPF

我在画布中有一个图像,用户可以单击图像,用户单击的位置会出现一个绿点。

http://img3.mukewang.com/60d6860f00012c2a03350668.jpg

我想将图像保存在内存流上供以后使用,所有图像保存都很好,除了似乎没有正确绘制的点,我的猜测是关于我必须应用的屏幕比例来绘制绿点因为显示的图像比源图像小。

http://img2.mukewang.com/60d6861b00019e3007370837.jpg

XAML:


<Canvas x:Name="ImageCanvas"

        Grid.Column="1"

        Background="Transparent">


    <Image x:Name="SelectedPartImage"

           Width="{Binding ElementName=ImageCanvas, Path=ActualWidth}"

           Height="{Binding ElementName=ImageCanvas, Path=ActualHeight}"

           Panel.ZIndex="0"

           MouseLeftButtonDown="OnMouseLeftButtonDown"

           Source="{Binding SelectedPartImageSource}" />


    <Ellipse x:Name="EllipseClick"

             Width="15"

             Height="15"

             Panel.ZIndex="1"

             Fill="{StaticResource GreenColor}"

             Visibility="Hidden" />

</Canvas>

DrawEllipse(我用来绘制椭圆的方法,AdjustToCanvas 只是避免用户在图像所在的画布外单击)


public void DrawEllipse()

{

    // Adjust To Canvas

    (double x, double y) = AdjustToCanvas(Mouse.GetPosition(ImageCanvas));


    // Center Ellipse

    x -= EllipseClick.Width / 2;

    y -= EllipseClick.Height / 2;


    Canvas.SetLeft(EllipseClick, x);

    Canvas.SetTop(EllipseClick, y);

}


小怪兽爱吃肉
浏览 270回答 1
1回答

繁星淼淼

只要您在后面的代码中设置了 UIElement 的属性,就不会立即呈现它。它只会在返回该方法后完成。在这种情况下,尝试在更新其位置后立即保存 EllipseClick 将不会保存新位置,而是保存其原始位置,即 (0,0),因为它未设置!要解决此问题,请将 Save() 方法移动到另一个事件或调用ImageCanvas.UpdateLayout();更新 EllipseClick 的位置后。
打开App,查看更多内容
随时随地看视频慕课网APP