Вам нужно будет добавить элемент управления Image на панель макета в вашем приложении. Предположим, у вас есть MainWindow XAML как это:
<Window ...>
<Grid x:Name="rootGrid">
</Grid>
</Window>
Вы можете добавить изображение в коллекцию детской Энергосистемы по
rootGrid.Children.Add(image1);
Если вы собираетесь динамически размещать несколько изображений конкретных вы обычно используете элемент ItemsControl с соответствующей моделью просмотра, которая использует Canvas как свою ItemsPanel и устанавливает местоположение каждого элемента изображения, привязывая свойства Canvas.Left
и Canvas.Top
в свой ItemContainerStyle. Он будет использовать элемент управления Image в ItemTemplate:
<ItemsControl ItemsSource="{Binding ImageItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding X}"/>
<Setter Property="Canvas.Top" Value="{Binding Y}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Width="{Binding Width}"
Height="{Binding Height}"
Source="{Binding Image}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Модель вида будет выглядеть следующим образом:
public class ImageItem
{
public double X { get; set; }
public double Y { get; set; }
public double Width { get; set; }
public double Height { get; set; }
public ImageSource Image { get; set; }
}
public class ViewModel
{
public ObservableCollection<ImageItem> ImageItems { get; set; }
}
Как вы можете видеть ItemsSource
свойства ItemsControl связанно с ImageItems
собственности посмотреть модель. Связывание элементов переходит к свойствам класса элемента данных ImageItem
, то есть к типу элемента коллекции.
Теперь вы создадите экземпляр модели представления, например. в конструкторе вашего MainWindow и назначить его в DataContext
:
public MainWindow()
{
InitializeComponent();
var vm = new ViewModel
{
ImageItems = new ObservableCollection<ImageItem>()
};
vm.ImageItems.Add(new ImageItem
{
X = 100,
Y = 100,
Width = 100,
Height = 100,
Image = new BitmapImage(new Uri(...))
});
DataContext = vm;
}
Ну, ваш первый пример работал в некоторой степени. Только мне нужно отображать изображение при определенных координатах x/y, поэтому сетка в этом случае не идеальна.(Я должен был указать) Что касается второго примера, мне нужно будет отображать как минимум несколько десятков изображений, поэтому мне нужно сделать это программно. Спасибо за помощь, я ближе к ответу сейчас! – parsodark
Если вы собираетесь разместить несколько изображений в определенных местах, вы обычно используете элемент ItemsControl с Canvas как ItemsPanel и подходящую модель представления. Я приведу пример. – Clemens
Спасибо! Я тоже выкопаю его на своей стороне. – parsodark