template item wpf combobox databound

template - wpf combobox items



Deshabilitar selección de separador en cuadro combinado de datos enlazados en WPF (3)

Tengo un cuadro combinado que está enlazado a datos. En esta lista, necesito un separador. Dado que esto es de datos, hago algo muy similar a esta publicación . Mi base de datos devuelve la lista, incluye un ''-'' para marcar a dónde debe ir el separador, y el datatrigger lo convierte en un separador.

<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>

Esto funciona bien, aparte del problema que tengo aquí, y un pequeño problema de diseño (que pondré en otra pregunta).

Al usar el mouse, el usuario no puede seleccionar el separador, que es el correcto. Pero si el usuario usa la flecha arriba / abajo para seleccionar elementos, puede seleccionar el separador. Este no es el comportamiento predeterminado, que saltaría el separador.

¿Cómo puedo hacer que este separador se comporte de manera similar a como lo haría si tu XAML tuviera varios elementos de ComboBox y un elemento separador (omitiendo el separador al usar las teclas hacia arriba y hacia abajo)?


El elemento seleccionable no es el Separador en sí, sino el ComboBoxItem que contiene un Separador.
Intente establecer Focusable = "False" en el DataTrigger. Esto debería hacer que ComboBoxItem "no se pueda seleccionar"

Actualizar
Posición fija de Setter

<DataTrigger Binding="{Binding Code}" Value="-"> <Setter Property="Focusable" Value="False"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBoxItem}"> <Separator HorizontalAlignment="Stretch" IsEnabled="False"/> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger>


En lugar de configurar "Enfocable" como lo sugiere Meleak, establezca "IsEnabled" en falso en el Setter.

<DataTrigger Binding="{Binding Code}" Value="-"> <Setter Property="IsEnabled" Value="False"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBoxItem}"> <Separator HorizontalAlignment="Stretch"/> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger>


Intenté la sugerencia mencionada anteriormente y todavía no pude obtener el separador. En su lugar, agregó una entrada seleccionable en blanco en el cuadro combinado. Finalmente esto es lo que funcionó para mí.

Establecí el elemento de datos vinculado como NULL. Y mi XAML se ve así:

<DataTrigger Binding="{Binding}" Value="{x:Null}"> <Setter Property="IsEnabled" Value="False"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBoxItem}"> <Separator HorizontalAlignment="Stretch"/> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger>