2011-02-03 19 views
6

Para configurar una ReadOnly ComboBox en XAML (WPF), usted tiene que establecer un ComboBox y una TextBox mostrando sólo uno de ellos de acuerdo con un par de propiedades IsReadOnly/IsEditable que debe existir en su ViewModel. Tenga en cuenta que en esta muestra "UserNVL" debe existir en los recursos y debe ser una colección NameValueList que nos permite convertir ID a los nombres. En este caso el RecipientID es la clave para un nombre de usuario. Tenga en cuenta también la VisibilityConverter también debe existir en los recursos y es un estándar BooleanToVisibilityConverter.XAML ReadOnly de ComboBox

Gosh! Esto fue tan difícil de encontrar que tuve que hacerlo yo mismo. Esto le permite al usuario seleccionar el contenido del cuadro de texto. De ninguna manera una persona con discapacidad ComboBox alguna vez le permitiría hacerlo.

Respuesta

3
<DockPanel> 
    <TextBlock Text="Recipient" Margin="6,9,3,6" HorizontalAlignment="Right"/> 
    <ComboBox 
     x:Name="RecipientID" 
     ItemsSource="{Binding Source={StaticResource UserNVL}}" 
     DisplayMemberPath="Value" 
     SelectedValuePath="Key" 
     SelectedValue="{Binding Path=RecipientID}" 
     Height="20" 
     Margin="6,6,0,6" 
     MinWidth="200" 
     HorizontalAlignment="Left" 
     IsEditable ="True" 
     Visibility="{Binding Path=IsEditable, Converter={StaticResource VisibilityConverter}}"/> 
    <TextBox 
     x:Name="RecipientName" 
     Text="{Binding ElementName=RecipientID, Path=Text}" 
     Margin="6,6,0,6" 
     MinWidth="200" 
     HorizontalAlignment="Left" 
     Style="{StaticResource textBoxInError}" 
     Visibility="{Binding Path=IsReadOnly, Converter={StaticResource VisibilityConverter}}"/> 
</DockPanel> 
0

¿Por qué no simplemente establecer IsEnabled = false?

+2

Por qué de hecho? Le pregunté a mis usuarios la misma pregunta. Parece cuadros de texto con discapacidad y los cuadros combinados con discapacidad se ven tan diferentes y los usuarios preguntan si "esta cosa gris" no podía ser como el cuadro de texto que se encuentra por debajo y que es tan agradable y fácil de leer y donde pueden seleccionar el contenido. –

+1

Además, solo lectura debe permitir la copia del valor. – Dave

0

Si IsEnabled se establece en false, el valor es Combobox casi no legible Lo que encontré solución como adecuado es:

  • cuadro combinado y cuadro de texto (formateado como de sólo lectura) están en la misma posición en la parrilla
  • cuadro combinado se extiende a la columna siguiente para obtener 15 anchura botón adicional de modo desplegable es visible
  • cuadro de texto .IsVisible está vinculado a combobox.IsEnabled con bool to visibility converter.
  • TextBox.Text está obligado a ComboBox.selectedItem (en mi caso se escribe fuertemente lo que en realidad atados en .DisplayText de ella)
0

creo que le resultará mucho más fácil y práctico para crear una clase para extender la clase ComboBox en este muy simple manera:

  1. reemplazar el método OnSelectionChanged del Combobox para verificar la propiedad IsReadOnly antes para permitir base.OnSelectionChanged (e) para ejecutar.

De esta manera solo tiene que establecer la propiedad ComboBox.IsReadOnly en True. No es gran XAML a escribir en todas partes ...