Сначала вам нужно создать модель представления Color
public class ColorViewModel : INotifyPropertyChanged
{
public string _name;
public Color _color;
public ColorViewModel(string name, Color color)
{
this._name = name;
this._color = color;
}
public string Name
{
get => this._name;
set
{
if (value == this._name) return;
this._name = value;
this.OnPropertyChanged();
}
}
public Color Color
{
get => this._color;
set
{
if (value == this._color) return;
this._color = value;
this.OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Затем модель представления вашего представления может содержать список всех ваших цветов.Вы можете либо извлечь их из списка, который вы создали, либо получить те, которые встроены в .net.
public class ViewModel
{
public ViewModel()
{
var allColors = typeof(Colors).GetProperties();
foreach(var colorInfo in allColors)
{
this.Colors.Add(new ColorViewModel(colorInfo.Name, (Color)colorInfo.GetValue(null)));
}
}
public ObservableCollection<ColorViewModel> Colors { get; } = new ObservableCollection<ColorViewModel>();
}
Наконец, ваш xaml может выглядеть так:
<ComboBox ItemsSource="{Binding Colors}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Rectangle Height="20" Width="20" >
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}" />
</Rectangle.Fill>
</Rectangle>
<TextBlock Margin="10,0,0,0" Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Этодолжно выглядеть так в вашем приложении 