Идея заключается в создании элемента управления, который будет иметь динамическую ширину.Его ширина будет:
controlWidth = imageWidth * numberOfTrucks;
, затем добавьте фон к этому элементу управления с изображением мозаичного грузовика.Грузовик будет отображаться необходимое количество раз.
TruckDisplay.xaml:
<UserControl x:Class="WpfApplication1.TrucksDisplay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid x:Name="grid" Height="30" HorizontalAlignment="Left">
<Grid.Background>
<ImageBrush ImageSource="truck.gif" Stretch="None" TileMode="Tile" Viewport="0,0,40,30" ViewportUnits="Absolute" />
</Grid.Background>
</Grid>
</UserControl>
TruckDisplay.xaml.cs:
public partial class TrucksDisplay
{
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof (double), typeof (TrucksDisplay), new PropertyMetadata(DefaultValueChanged));
private static void DefaultValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
var trucksDisplay = (TrucksDisplay) dependencyObject;
trucksDisplay.grid.Width = 40*trucksDisplay.Value;
}
public double Value
{
get { return (double) GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public TrucksDisplay()
{
InitializeComponent();
}
}
Использование (mainWindow.xaml):
<StackPanel>
<WpfApplication1:TrucksDisplay Value="2" />
<WpfApplication1:TrucksDisplay Value="2.5" />
<WpfApplication1:TrucksDisplay Value="3" />
<WpfApplication1:TrucksDisplay Value="6" />
</StackPanel>
Результат:
![Trucks](https://i.stack.imgur.com/vDJ4z.png)
Обратите внимание, что у меня было изображение с шириной = 40 и высотой = 30, поэтому я жестко закодировал эти значения в нескольких местах.Довольно просто сделать его динамичным, чтобы можно было указать и изображение.