Я пишу приложение, в котором я хотел бы отключить несколько элементов в ComboBox
, а также хочу запретить/заблокировать выбор отключенных элементов. Обратите внимание, что ComboBox в главном окне имеет другой ComboBox как элемент ComboBox Item init (который определяется во время выполнения с помощью селектора шаблонов данных).Запретить/Блокировать выделение запрещенного элемента combobox в wpf
В приведенном ниже коде я могу отключить ComboBox внутри ComboBox, но это не помешает пользователю выбрать этот отключенный элемент ComboBox. Любая помощь в запрете/блоке выбора отключенных элементов будет полезна.
Ниже приведены фрагменты кода
ComboBox в главном окне: селектор шаблона
<Grid>
<ComboBox HorizontalAlignment="Left" VerticalAlignment="Top"
Width="120" Margin="87.2,44.8,0,0"
ItemsSource="{Binding Cars}"
ItemsPanel="{DynamicResource ItemsPanelTemplateHorizontal}"
ItemTemplateSelector="{StaticResource QualityComboBoxTemplateSelector}"
SelectedItem="{Binding SelectedItm}"/>
</Grid>
данных:
public class QualityComboBoxTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var element = container as FrameworkElement;
var dataTemplate = element.FindResource(((item is string) && item.Equals("Ferrari")) ?
"DataTemplateTopLevelCombobox2" : "DataTemplateTopLevelCombobox1") as DataTemplate;
return dataTemplate;
}
}
шаблоны данных для выше ComboBox:
<DataTemplate x:Key="DataTemplateTopLevelCombobox1">
<Border BorderBrush="Black" BorderThickness="1" >
<TextBlock HorizontalAlignment="Left"
TextWrapping="Wrap" Text="{Binding}"
VerticalAlignment="Top"/>
</Border>
</DataTemplate>
<DataTemplate x:Key="DataTemplateTopLevelCombobox2">
<Border Width="100">
<ComboBox Text="Custom" Height="21.96"
ItemsSource="{Binding DataContext.Models, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
IsEnabled="{Binding DataContext.EnableCombo, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
</Border>
</DataTemplate>
На самом деле я не использую ComboboxItemStyle, я использую DataTemplate. – vmore
@vmore Я обновил свой ответ, показывая, как вы можете применить стиль ComboBoxItem. – akjoshi
Спасибо @akjoshi. Это сработало. – vmore