wpf - En XAML, cómo decir: ancho y alto predeterminados, por ejemplo, TextBox
font-size autosize (4)
Así que voy a ir 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 ENORME, cubre toda la ventana. (!)
Ok, eso no es lo que quiero, pero tampoco quiero definir el tamaño EXACT, ya que sé que Height
y Width
deben ser flexibles, así que intento:
<TextBox Name="theName" Width="Auto" Height="Auto"/>
La misma cosa. Entonces intento:
<TextBox Name="theName"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
La misma cosa. Así que solo codifiqué los tamaños:
<TextBox Name="theName" Width="100" Height="20"/>
Lo que sé que no es una buena práctica de programación en WPF.
Entonces, ¿qué le dice a TextBox
que "muestre los tamaños predeterminados para el tamaño de fuente que se usa"?
Además de usar un panel diferente como Stefan mencionó, podrías darle al TextBox una alineación que no sea Stretch. p.ej
<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 PPP normal de hoy mapean de 1: 1 a píxeles.
Pero, si ejecuta el programa en modo alto DPI, TextBox crecerá con el DPI (y la fuente).
Por lo tanto, establecer un tamaño de código fijo no es tan malo.
Aparte de eso, solo puedes usar HorizontalAlignment y VerticalAlignment que no son "Stretch", esto ajustará el TextBox al contenido, pero un TextBox vacío será muy pequeño.
Puede configurar VerticalAlignment a "Center", "Top" o "Bottom" para obtener una altura automática de aproximadamente una línea (quizás respaldada por una configuración MinHeight para evitar problemas con fuentes muy pequeñas) y luego establecer el ancho para que el ancho del TextBox no cambiar a medida que el usuario escribe en él.
Puedes tomar el ejemplo de Bryan incluso un poco más. Al especificar una alineación específica que no sea elástica, restringe aún más el TextBox para que no se expanda más allá de un determinado tamaño. p.ej:
<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 Grilla y restringiéndolas en varias modas. Como viene de un fondo HTML, piense que es como usar una tabla para controlar el diseño. Recuerde que también puede anidar otros objetos del contenedor (es decir, StackPanels, WrapPanels, otras Grids, etc.).
El desafío con los controles XAML y WPF / Silverlight es que son muy flexibles, por lo que debe tener en cuenta todas las opciones y la forma en que afectan el diseño.
Buena suerte. Estoy pasando exactamente lo mismo ahora.
Use un contenedor diferente. La Grilla siempre estira sus controles secundarios para llenar la celda de la grilla.
Podría usar, por ejemplo, un panel de distribución que solo extienda sus controles en una dirección.