2016-08-08 2 views
0

Из учебника я имею следующий выпадающий:Чтение и предварительно выпадающий цветовых свойств

<ComboBox Name="comboBox_warnColor" Margin="5,0,5,0" SelectionChanged="comboBox_warnColor_SelectionChanged"> 
     <ComboBox.ItemTemplate> 
       <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
           <Rectangle Fill="{Binding Name}" Width="12" Height="12" Margin="0,2,5,2" /> 
           <TextBlock Name="PART_ColorName" Text="{Binding Name}" /> 
         </StackPanel> 
       </DataTemplate> 
     </ComboBox.ItemTemplate> 
</ComboBox> 

я заполнить это следующим образом:

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

Я хочу, чтобы сохранить выбранный элемент в тексте файл, чтобы загрузить его в поле со списком позже.

Какое значение я могу сохранить, чтобы использовать его для этого сценария? или Что было бы хорошим значением ID для заданных по умолчанию цветов?

SelectedIndex в стороне Я не смог найти его.

+0

Вы посмотрели на SelectedItem? Он возвращает тот же тип, что и в вашей коллекции ItemSource. Вы можете извлечь Имя или любые свойства, которые вы хотите от этого. – Funk

+0

Это точно точка. Конечно, я мог бы сделать что-то вроде 'comboBox_warnColor.SelectedItem.ToString(). Split ('') [1]', чтобы извлечь его, но это не похоже на хороший стиль. –

+1

Итак, ваш реальный вопрос в том, что было бы хорошим значением ID для стандартных цветов? – grek40

ответ

1

Вы можете работать с SelectedValuePath и SelectedValue нравится следующим образом:

<ComboBox SelectedValuePath="Name" SelectedValue="{Binding SelectedName}" Name="comboBox_warnColor" Margin="5,0,5,0"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Rectangle Fill="{Binding Name}" Width="12" Height="12" Margin="0,2,5,2" /> 
       <TextBlock Name="PART_ColorName" Text="{Binding Name}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

в код:

public class VeryUnrefinedViewmodel 
{ 
    public string SelectedName { get; set; } 
} 

// ... 

VeryUnrefinedViewmodel _DataContextInstance = new VeryUnrefinedViewmodel(); 
// your initialization code 
comboBox_warnColor.ItemsSource = typeof(Colors).GetProperties(); 
comboBox_warnColor.DataContext = _DataContextInstance; 
// _DataContextInstance.SelectedName will contain the name of the selected color 

Вы можете программно предварительно выбрать цвет, установив начальное значение для SelectedName. Если вы хотите динамически изменять выбор, вам необходимо реализовать INotifyPropertyChanged для модели viewmodel.

VeryUnrefinedViewmodel _DataContextInstance = new VeryUnrefinedViewmodel() { SelectedName = "Yellow" }; 
+0

Это работает, но я думаю, что это немного неудобно. С другой стороны, это может также относиться и к моей программе. –

+1

@MarcoFrost Я думаю, что это неудобно, потому что ваше приложение не в дизайне MVVM, поэтому у вас есть другой код шаблона. Кстати, я даже не думал об этом раньше: вы можете просто получить доступ к «comboBox_warnColor.SelectedValue» в коде вместо работы с datacontext и viewmodel ... Возможно, это больше соответствует остальной части вашего кода. – grek40

+0

Ну, это слишком просто. Я не знал, что поле со списком примет строку в качестве значения для выбора элемента. В этом комбинированном блоке есть два дочерних элемента управления. –

0

RGBA может в уникальном режиме определить цвет, поэтому, возможно, вы захотите сохранить его как идентификатор. И вы можете преобразовать свой цвет в/из RGBA, используя этот question.

+0

Я уже думал об этом. Проблема заключается в том, что с указанным способом заполнения ComboBox я не могу напрямую выбирать элемент через значение rgba. –

+0

У вас может быть конвертер в вашей привязке для перевода RGBA в цвет. – 3615

Смежные вопросы