У меня есть Combo Box, который является привязкой к базе данных. В этом списке мне нужен разделитель. Поскольку это привязка данных, я делаю что-то очень похожее на this post. Моя база данных возвращает список, включая «-», чтобы отметить, куда должен идти разделитель, и datatrigger делает это разделителем.Отключить выбор разделителя в поле со списком данных в WPF
<ComboBox Name="cbAction" Grid.Column="1" Grid.Row="0" Margin="5,2,5,2" DisplayMemberPath="Description" SelectedValuePath="Code" SelectionChanged="cbAction_SelectionChanged">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Code}" Value="-">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Separator HorizontalAlignment="Stretch" IsEnabled="False"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
Это работает в основном хорошо, кроме вопроса я имею здесь, и незначительные проблемы проектирования (который я поставил другой вопрос).
При использовании мыши пользователь не может выбрать разделитель, что является правильным. Но если пользователь использует стрелку вверх/вниз для выбора элементов, они могут выбрать разделитель. Это не поведение по умолчанию, которое пропустит разделитель.
Как я могу сделать этот сепаратор вести себя подобно тому, как это было бы, если ваш XAML имел различные ComboBoxItems и пункт Разделитель (пропуск через разделитель при использовании кнопок вверх и вниз)
Это решает часть проблемы, но не полностью. Если у меня есть расширенное поле combobox, он больше не будет выбирать разделитель с помощью клавиш со стрелками. Но если combobox является текущей вкладкой, если вы будете, а не расширены, пользователь может использовать клавиши со стрелками вверх и вниз и по-прежнему выбирать разделитель. – jmlumpkin 2010-11-24 14:12:01
Ах да, это правда, я только подумал о выпадающем списке. Для выбора непосредственно в ComboBox вам придется использовать IsEnabled вместо Focusable, как сказал karmicpuppet. – 2010-11-24 15:17:53