2017-02-19 70 views
0

我對WPF不再那麼做了,我總是對最基本的東西感到迷茫。我嘗試過谷歌搜索,但他們沒有幫助。在WPF中,在附加到畫布上的位圖上繪製直線和PNG的正確方法是什麼?

我有一個畫布(也許我不應該使用畫布?),我想附上一個圖像。我能找到這樣做的唯一辦法是,像這樣:

<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> 

現在,我需要藉助附着在畫布(在圖像上線後,我也得把透明的PNG,或BMP的白色設置爲圖像中的Alpha 0)。

在過去,我會從image.source獲得一個writeablebitmap,但你顯然無法從ImageBrush那樣做?

在屏幕上放置圖像並在圖像上繪製圖像並將圖像傳輸到圖像上的「正確方法」是什麼?

+0

線應該成爲位圖的一部分還是應該浮動在圖像的頂部? –

+0

圖像頂部的線條「浮動」。這些行是疊加的,就像添加的位圖一樣 – zetar

回答

1

只需將多個圖像和線條元素放在一個共同的面板中,畫布:

<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 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 
}); 

萬一你以後想要添加多個形狀疊加層,您可以考慮使用它emsControl與適當的視圖模型,例如如下所示:https://stackoverflow.com/a/40190793/1136211

+0

對不起,我應該指出,我不知道PNG,BMP和行將被添加到哪裏以及在哪裏。這由用戶通過C#完成。我怎麼做? – zetar