2017-02-19 14 views
0

Я больше не так много работаю с WPF, и я всегда стараюсь найти самые простые вещи. Я пробовал Google, но они не помогают.В 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> 

Теперь мне нужно рисовать линии на изображении, прикрепленной к холсту (позже я также должен будет разместить прозрачный PNGs или ВМР с белым установлен на Alpha 0, также на изображении).

В прошлом я получил бы writeablemartmap с image.source, но вы, видимо, не можете сделать это из 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