Добавить новый цветовой объект к классу цветов c # wpf - PullRequest
0 голосов
/ 22 сентября 2018

Мне нужна помощь.Я занимаюсь разработкой этого программного обеспечения, которое я хотел бы иметь в ComboBox с помощью ComboBoxItems, у которого есть имя и образец цвета.Что-то вроде того, когда вы делаете это так:

cmbColors.ItemsSource = typeof (Colors) .GetProperties ();

Что будет выглядеть так: Изображение

По сути, единственное, что мне нужно, это добавить свои собственные цвета на основе RGB (+ Name) в мой комбинированный список

1 Ответ

0 голосов
/ 23 сентября 2018

Сначала вам нужно создать модель представления 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>

Этодолжно выглядеть так в вашем приложении It should look like this in your application

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...