2009-03-03 17 views
12

Tengo un cuadro de texto definido dentro de una ventana así:Deje cuadro de texto para cambiar el tamaño, pero no crece en la entrada del usuario

<Window x:Class="NS.MainWindow" 
    ... 
    SizeToContent="WidthAndHeight"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition MinWidth="200" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition MinHeight="50" /> 
     </Grid.RowDefinitions> 
     <TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock> 

     <TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" /> 
    </Grid> 
</Window> 

El problema es que cuando el usuario escribe en el cuadro de texto que se expande hacia la derecha desde solo se establece MinWidth. Lo que realmente quiero es que el texto se ajuste a la siguiente línea. Puedo hacer que haga esto si cambio el MinWidth en la columna para que sea Ancho. Sin embargo, si hago esto, el TextBox ya no cambia de tamaño cuando se cambia el tamaño de la Ventana.

¿Hay alguna manera de tener ambos? (Es decir, cambiar de tamaño sólo en cambio de tamaño de la ventana, de lo contrario envolver)

Respuesta

15

La razón por la que está teniendo este comportamiento es porque ha establecido la propiedad de la ventana SizeToContent, que básicamente autoriza a la ventana a redimensionarse en función del tamaño solicitado por su contenido. Así que a medida que escribe más cosas, el cuadro de texto dice que necesito más espacio, la ventana crece obedientemente. Su cuadro de texto no crecerá si no establece la propiedad SizeToContent.

Así que diría perder la propiedad SizeToContent colocador & Uso dimensionamiento rejilla proporcional. Aquí digo que la Columna # 2 tenga el doble del ancho de la Columna # 1. El valor por defecto "estiramiento" de HorizontalAlignment y VerticalAlignment para la cuadrícula debe asegurarse de que sus controles de cambio de tamaño correctamente en un cambio de tamaño de la ventana.

<Window ... 
    Title="MyWindow" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip" 
     MinWidth="300" Width="300" Height="80"> 
    <Grid x:Name="myGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*" MinWidth="100"/> 
      <ColumnDefinition Width="2*" MinWidth="200" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition MinHeight="50" /> 
     </Grid.RowDefinitions> 

     <TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock> 
     <TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow"/> 
    </Grid> 

Si acaba de añadir el colocador propiedad SizeToContent de nuevo a por encima de fragmento de código ... te gustaría ver algún comportamiento extraño en el cuadro de texto crece inicialmente con el contenido del texto .. Sin embargo, si cambia el tamaño de la ventana una vez .. la cuadro de texto dejaría de crecer. Extraño ... no puede explicar ese comportamiento.
HTH

0

Cambiar el segundo ColumnDefinition ser Anchura = "*".

+1

Esto seguirá creciendo el cuadro de texto. Usar * implica - use el resto del ancho disponible para la Columna # 2 – Gishu

3

El TextBox de WPF no parece tener esa opción incorporada.

Para resolver este problema, se puede utilizar un cuadro de texto de usuario que reporta un tamaño deseado (0, 0). Es un hack feo, pero funciona.

En el archivo MainWindow.xaml.cs:

namespace NS 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     ... 
    } 

    // Ugly HACK because the regular TextBox doesn't allow autoresize to fit the parent but NOT autoresize when the text doesn't fit. 
    public class TextBoxThatDoesntResizeWithText : TextBox 
    { 
     protected override Size MeasureOverride(Size constraint) 
     { 
      return new Size(0, 0); 
     } 
    } 
} 

A continuación, en el archivo de MainWindow.xaml:

<Window x:Class="NS.MainWindow" 
    ... 
    xmlns:local="clr-namespace:NS" 
    SizeToContent="WidthAndHeight"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition MinWidth="200" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition MinHeight="50" /> 
     </Grid.RowDefinitions> 
     <TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock> 

     <local:TextBoxThatDoesntResizeWithText Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" /> 
    </Grid> 
</Window> 
Cuestiones relacionadas