在 WPF 中,在附加到 canvas 的位图上绘制线条和 PNG 的正确方法是什么?

In WPF what is the proper method for drawing a line and PNGs on a bitmap that is attached to a canvas?

我不再对 WPF 做那么多了,而且我似乎总是对最基本的东西感到茫然。我试过谷歌,但没有用。

我有一个 canvas(也许我不应该使用 canvas?),我想附上一张图片。我能找到的唯一方法是这样的:

<Canvas Grid.Column="2" HorizontalAlignment="Right" Height="822"  VerticalAlignment="Top" Width="1198" Name="MainCanvas">
    <Canvas.Background>
        <ImageBrush ImageSource="/MapDesignModule;component/MapFrame.bmp" Stretch="None" AlignmentY="Top" AlignmentX="Right"/>
    </Canvas.Background>
</Canvas>

现在,我需要在附加到 canvas 的图像上画线(稍后我还必须在图像上放置透明的 PNG 或白色设置为 Alpha 0 的 BMP)。

过去,我会从 image.source 获得一个可写位图,但您显然不能从 ImageBrush 获得它?

什么是 'proper way' 将图像放在屏幕上并在其上绘制和 blit 图像?

只需将多个 Image 和 Line 元素放在一个公共面板中,例如一个 Canvas:

<Canvas>
    <Image Source="/MapDesignModule;component/MapFrame.bmp" /> 
    <Image Source="/MapDesignModule;component/Overlay.png" /> 
    <Line X1="100" Y1="100" X2="200" Y2="200" Stroke="Black" />
</Canvas>

您还可以为 Canvas

指定一个名称
<Canvas x:Name="canvas">

在后面的代码中访问它:

canvas.Children.Add(new Image
{
    Source = new BitmapImage(new Uri(
        "pack://application:,,,/MapDesignModule;component/MapFrame.bmp"))
});

canvas.Children.Add(new Line
{
    X1 = 100,
    Y1 = 100,
    X2 = 200,
    Y2 = 200
});

如果您以后想要添加多个形状叠加层,您可以考虑使用具有适当视图模型的 ItemsControl,例如如下所示: