2013-09-11 4 views
0

Я играю с wpf в течение нескольких месяцев со смешанным успехом, но у меня есть я в тупике. У меня есть ListBox, содержащий Расширители, что-то вроде этого:WPF Listbox, содержащий элементы управления Expander

<ListBox> 
    <Expander Header="Options"> 
    <StackPanel> 
     <CheckBox Content="Option 1" /> 
     <CheckBox Content="Option 2" /> 
     <CheckBox Content="Option 3" /> 
    </StackPanel> 
    </Expander> 
    <Expander Header="More Options"> 
    <StackPanel> 
     <CheckBox Content="Option 1" /> 
     <CheckBox Content="Option 2" /> 
     <CheckBox Content="Option 3" /> 
    </StackPanel> 
    </Expander> 
</ListBox> 

Я пытаюсь выяснить, как:

  1. Предотвратить часть содержимого Expander от изменения цвета, когда он выбран в ListBox. Я хочу, чтобы только заголовок Expander имел синий фон, а не CheckBoxes

  2. Сделайте Expander выбранный элемент в ListView при щелчке его заголовка. На данный момент вам нужно щелкнуть за пределами текста заголовка Expander, чтобы он стал выбран в виде списка.

+1

Для B) см. Http://stackoverflow.com/q/14522135/620360. – LPL

+0

Для A) используйте элемент управления с цветом фона в качестве заголовка или явно установите цвет фона ComboBoxes. –

ответ

0

Решение вашего первого вопроса прост. Просто добавьте это в ListBox.Resources:

<ListBox.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> 
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" /> 
</ListBox.Resources> 

Вы можете изменить цвета к тому, что вы предпочитаете.

Решение на ваш второй вопрос: от простого. Я хотел бы сказать, что объявление элементов управления внутри ListBoxдалеко от оптимального. Гораздо лучшее решение - создать класс типа данных, привязать коллекцию этих экземпляров к свойству ListBox.ItemsSource, а затем создать DataTemplate s для определения того, как должен выглядеть каждый элемент ... вот где вы должны объявить свои элементы управления Expander.

Как на StackOverflow, мы предпочитаем один вопрос нужно задать по почте, пожалуйста, попробовать то, что я только предположил, поиск соответствующих терминов в Интернете, если это необходимо, а затем вернуться с новым вопросом, показывая нам свой новый код.

+0

Приносим извинения за многочисленные вопросы. Xaml, который вы указали выше, изменяет заголовок и элемент управления содержимым расширителя. Я надеюсь, что смогу изменить их самостоятельно. Извините, если я не понял. –

+0

XAML, предоставленный мной, просто удаляет синий цвет выбора по умолчанию. Если вы последуете моему предложению, вы можете добавить код в свой «DataTemplate», который изменит цвет всего, что вам нравится ... первым шагом является просто удалить синий прямоугольник выбора по умолчанию. После того, как вы дошли до этого этапа, добавьте еще один вопрос, и я покажу вам, как ... на самом деле было бы лучше искать «цвет фона WPF SelectedItem», как это было много раз ответили. – Sheridan

+0

Будет, спасибо Шеридан. –

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