//usercontrol.xaml
<UserControl x:Class="WpfApp381.ElpImgTbk"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp381"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Ellipse Fill="{Binding ElpFillBrush,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
/>
<TextBlock Text="{Binding ElpStr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="30"
Foreground="Red"/>
</Grid>
</UserControl>
//usercontrol.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp381
{
/// <summary>
/// Interaction logic for ElpImgTbk.xaml
/// </summary>
public partial class ElpImgTbk : UserControl
{
public ElpImgTbk()
{
InitializeComponent();
this.DataContext = this;
}
public ImageBrush ElpFillBrush
{
get { return (ImageBrush)GetValue(ElpFillBrushProperty); }
set { SetValue(ElpFillBrushProperty, value); }
}
// Using a DependencyProperty as the backing store for ElpFillBrush. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ElpFillBrushProperty =
DependencyProperty.Register("ElpFillBrush", typeof(ImageBrush),
typeof(ElpImgTbk), new PropertyMetadata(null));
public string ElpStr
{
get { return (string)GetValue(ElpStrProperty); }
set { SetValue(ElpStrProperty, value); }
}
// Using a DependencyProperty as the backing store for ElpStr. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ElpStrProperty =
DependencyProperty.Register("ElpStr", typeof(string),
typeof(ElpImgTbk), new PropertyMetadata(""));
}
}
//mainwindow.xaml
<Window x:Class="WpfApp381.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp381"
mc:Ignorable="d"
WindowState="Maximized"
Title="MainWindow" Height="450" Width="800">
<Canvas x:Name="cvs"/>
</Window>
//mainwindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
namespace WpfApp381
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Random rnd { get; set; }
public MainWindow()
{
InitializeComponent();
rnd = new Random();
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
DrawElps();
}
private void DrawElps()
{
var imgsList = Directory.GetFiles("../../Images");
int width = (int)(this.ActualWidth) - 100;
int height = (int)(this.ActualHeight) - 80;
if (imgsList != null && imgsList.Any())
{
int imgsCount = imgsList.Count();
for (int i = 0; i < 100; i++)
{
ElpImgTbk elpTbk = new ElpImgTbk();
elpTbk.Width = 100;
elpTbk.Height = 60;
BitmapImage bmi = new BitmapImage();
bmi.BeginInit();
bmi.UriSource = new Uri(imgsList[i % imgsCount], UriKind.RelativeOrAbsolute);
bmi.EndInit();
bmi.Freeze();
elpTbk.ElpFillBrush = new ImageBrush(bmi);
elpTbk.ElpStr = $"{i+1}";
Canvas.SetLeft(elpTbk, rnd.Next(0, width));
Canvas.SetTop(elpTbk, rnd.Next(0, height));
if (!cvs.Children.Contains(elpTbk))
{
cvs.Children.Add(elpTbk);
}
}
}
}
}
}