You can use ItemsControl for Bind like this. A simple example where ItemsSource is just an ObservableCollection<Brush>
<VisualBrush> <VisualBrush.Visual> <ItemsControl x:Name="itemsControl" ItemsSource="{Binding MyBrushes}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Height="500" Width="500" Rows="1"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Rectangle Fill="{Binding}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </VisualBrush.Visual> </VisualBrush>
Update
It works for my use case, but I might be missing something here. Here is the complete code I tried. I get the same result from both
MainWindow.xaml
<Grid> <Grid.Background> <VisualBrush> <VisualBrush.Visual> <ItemsControl x:Name="itemsControl" ItemsSource="{Binding MyBrushes}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Height="500" Width="500" Rows="1"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Rectangle Fill="{Binding}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </VisualBrush.Visual> </VisualBrush> </Grid.Background> </Grid>
MainWindow.xaml.cs
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); BrushConverter brushConverter = new BrushConverter(); MyBrushes = new ObservableCollection<Brush>(); MyBrushes.Add(brushConverter.ConvertFrom("#22ADD8E6") as Brush); MyBrushes.Add(brushConverter.ConvertFrom("#22D3D3D3") as Brush); MyBrushes.Add(brushConverter.ConvertFrom("#22ADD8E6") as Brush); MyBrushes.Add(brushConverter.ConvertFrom("#22D3D3D3") as Brush); this.DataContext = this; } public ObservableCollection<Brush> MyBrushes { get; set; } }
source share