2010-12-16 17 views
5

Estoy trabajando con un cuadro combinado editable donde se puede ingresar texto en el área del cuadro de texto del cuadro combinado de WPF. Cuando la longitud del texto ingresado es mayor que el ancho del cuadro combinado, el cursor aún se muestra fuera del cuadro combinado y en el formulario, pero no se muestra el texto. ¿Hay alguna forma de restringir el cursor para que no se salga del combobox?WPF Combobox: Cursor fuera de límites cuando se intenta ingresar texto con longitud> ancho del cuadro combinado

Gracias.

Respuesta

0

Usted podría anular el default style y establezca la propiedad MaxLength en el TextBox ser utilizado para la presentación de contenidos (PART_EditableTextBox) y luego volver a utilizar ese estilo cuando sea necesario.

Si prefiere hacerlo en código, puede verificar SO answer que obtendrá el mismo comportamiento pero no lo forzará a crear un estilo.

EDIT:

Si desea que esto sea más dinámico que tendrá que measure the text. Puede manejar el evento TextChanged y realizar la medición.

+0

Hola Aaron, Gracias por la respuesta. Configuré MaxLength, que es la cantidad de caracteres que se ingresarán en el área de texto de combobox. Sin embargo, el problema aquí es que cada personaje ocupa una cantidad de espacio diferente. Digamos que MaxLength está configurado en 30 en xaml, cuando escribo en minúscula, quizás sea bueno y esté dentro del cuadro combinado, pero si escribo en mayúscula, aún excede el cuadro combinado. También una combinación diferente de personajes ocupa un espacio diferente. – user296623

+0

Esta es mi idea: si puedo obtener la posición en la que el cursor llega al borde del cuadro de texto en el control de cuadro combinado (al igual que en el ajuste de texto), puedo establecer este valor en MaxLength en lugar de hardcoding en xaml. Pero a partir de ahora, no estoy seguro de cómo hacer esto. – user296623

+0

@ user296623 Hay advertencias, por supuesto, con este enfoque. Si puede permitir que su ComboBox sea lo más amplia posible, esto se convierte en un problema. No estoy seguro de si tiene que lidiar con la localización, ya que podría ser otra área interesante. También puede hacer que crezca la porción editable de ComboBox ... por lo que su ancho no es fijo, lo que permitiría que ComboBox creciera a medida que se realizaba la escritura. Sin embargo, todo se reduce a la pantalla de bienes raíces ... no estoy seguro de cuál es su problema raíz. –

0

No sé si se ha encontrado una solución a esto, pero tengo el mismo problema y como lo veo ahora que proviene de esta parte del código:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"> 
    <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" /> 
</ControlTemplate> 

... y en el interior Estilo del cuadro combinado, en el organismo para plantilla:

... 
<TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" 
... 

Extracción esta plantilla parece resolver el problema y crear otros problemas menores.

0

Use ScrollViewer para PART_ContentHost en lugar del borde. Por ejemplo:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"> 
    <ScrollViewer x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" /> 
</ControlTemplate> 
... 
<TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" 
... 
Cuestiones relacionadas