为了账号安全,请及时绑定邮箱和手机立即绑定

在 Canvas 上绘图未正确保存 WPF

在 Canvas 上绘图未正确保存 WPF

C#
小怪兽爱吃肉 2021-06-24 18:00:18
我在画布中有一个图像,用户可以单击图像,用户单击的位置会出现一个绿点。我想将图像保存在内存流上供以后使用,所有图像保存都很好,除了似乎没有正确绘制的点,我的猜测是关于我必须应用的屏幕比例来绘制绿点因为显示的图像比源图像小。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);}
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

只要您在后面的代码中设置了 UIElement 的属性,就不会立即呈现它。它只会在返回该方法后完成。

在这种情况下,尝试在更新其位置后立即保存 EllipseClick 将不会保存新位置,而是保存其原始位置,即 (0,0),因为它未设置!

要解决此问题,请将 Save() 方法移动到另一个事件或调用

ImageCanvas.UpdateLayout();

更新 EllipseClick 的位置后。


查看完整回答
反对 回复 2021-06-26
  • 1 回答
  • 0 关注
  • 269 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信