Pregunta

Así que vengo a WPF desde una perspectiva HTML.

solo quiero poner un TextBox en mi ventana así:

<Grid>
    <TextBox Name="theName" />
</Grid>

Resulta que el TextBox es entonces ENORME, cubre toda la ventana.(!)

Ok, eso no es lo que quiero, pero tampoco quiero definir el tamaño EXACTO ya que lo sé. Height y Width debería ser flexible, así que intento:

<TextBox Name="theName" Width="Auto" Height="Auto"/>

La misma cosa.Entonces lo intento:

<TextBox Name="theName" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch"/>

La misma cosa.Así que simplemente codifico los tamaños:

<TextBox Name="theName" Width="100" Height="20"/>

Lo cual sé que no es una buena práctica de programación en WPF.

Entonces, ¿cómo se le dice? TextBox ¿Para "mostrar tamaños predeterminados para el tamaño de fuente que se utiliza"?

¿Fue útil?

Solución

Puedes llevar el ejemplo de Bryan un poco más allá. Al especificar una alineación específica que no se estira y restringe aún más el TextBox para que no se expanda más allá de cierto tamaño. por ejemplo:

<Grid x:Name="LayoutRoot">
        <TextBox HorizontalAlignment="Left" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap" 
        MinWidth="15" MinHeight="20" MaxWidth="500" MaxHeight="50"/>
</Grid>

Puede llevarlo aún más lejos configurando filas / columnas dentro de la cuadrícula y restringiéndolas de varias maneras. Como viene de un fondo HTML, piense en ello como usar una tabla para controlar el diseño. Recuerde que también puede anidar otros objetos de contenedor (es decir, StackPanels, WrapPanels, otras cuadrículas, etc.).

El desafío con XAML y los controles WPF / Silverlight es que son muy flexibles, por lo que debe tener un control de todas las opciones y cómo afectan el diseño.

Buena suerte. Estoy pasando por exactamente lo mismo ahora.

Otros consejos

Use un contenedor diferente. La cuadrícula siempre estira sus controles secundarios para llenar la celda de la cuadrícula.

Puedes usar p. un panel de pila que solo extiende sus controles en una dirección.

Además de usar un panel diferente como Stefan mencionó, podría darle al TextBox una alineación que no sea Stretch. por ejemplo,

<TextBox Name="theName" HorizontalAlignment="Left" VerticalAlignment="Top"/>

Los tamaños en WPF no son píxeles, son " píxeles independientes del dispositivo " que son 1/96 de pulgada, por lo que en la configuración de DPI normal de hoy asignan 1: 1 a píxeles.

Pero, si ejecuta el programa en modo DPI alto, TextBox crecerá con el DPI (y la fuente).

Entonces, establecer un tamaño codificado no es tan malo.

Aparte de eso, solo puede usar HorizontalAlignment y VerticalAlignment que no sean " Stretch " ;, esto ajustará el tamaño del TextBox al contenido, pero luego un TextBox vacío será pequeño.

Puede establecer VerticalAlignment en " Center " ;, " Top " o " Inferior " para obtener una altura automática de aproximadamente una línea (tal vez respaldada por una configuración MinHeight para evitar problemas de fuentes realmente pequeñas) y luego establecer el ancho para que el ancho del cuadro de texto no cambie a medida que el usuario lo ingrese.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top