En XAML cómo decir:ancho y alto predeterminados, por ej.Caja de texto
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"?
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.