2011-10-19 23 views
10

Estoy tratando de encontrar la forma de obtener un cuadro de texto para envolver su contenido, sin embargo, la situación no es exactamente la misma que en el escenario típico "no se ajusta". Mi cuadro de texto está contenido dentro de un DataTemplate que se utiliza dentro de una instancia Telerik RadTabControl (utilizando un ContentTemplatePresenter para determinar cuál de visualización para ver) y el XAML para el DataTemplate se ve así:WPF TextBox Wrapping

<DataTemplate x:Key="NotesTemplate"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Use the box below to record any general notes associated with this item." Style="{StaticResource Default}" /> 
     <TextBox TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" GridRow="1" Margin="20" Text="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" /> 
    </Grid> 
</DataTemplate> 

La razón que digo que doesn' En el escenario normal "no se ajusta", se usa para envolver hasta que tuve que cambiar la vista para que se pueda cambiar su tamaño a cualquier cosa para admitir los diferentes tamaños de pantalla en los que se ejecutará la aplicación. Cuando lo hice, el TextBox dejó de envolver porque (presumiblemente) cuando el usuario escribe algo, TextBox dice "Necesito más espacio", por lo que el padre lo obliga y el cuadro continúa hacia la derecha indefinidamente (aunque la vista obtiene barras de desplazamiento). Intenté establecer un MaxWidth usando Binding/RelativeSource, pero dado que el padre está específicamente diseñado para crecer, ese enfoque no funcionará. Lo que necesito que suceda es que la caja debe tener el ancho de sus 'padres que contienen' VisibleWidth. Es decir, si la ventana en sí misma es 1024x768, MaxWidth del TextBox debería ser 1024 y cualquier texto a partir de ese momento se ajustaría automáticamente, pero si la ventana crece a 1280x1024, el cuadro ahora debería ser 1280 y el texto se ajustará en consecuencia. Probé este escenario con esta expresión de enlace, pero no hubo suerte:

MaxWidth="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=ActualWidth}" 

El tamaño de la ventana en sí no está creciendo tan si podía conseguir ancho de la ventana (menos una cierta cantidad para cubrir la anchura de las pestañas que se encuentran parte de la TabControl) Creo que eso funcionaría.

¿Alguna idea?

+0

acabamos encontrando el mejor resultado a través de otro SO pregunta: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior. – RubyHaus

Respuesta

13

aunque la vista obtiene barras de desplazamiento

Desactivar la ScrollView horizontal, por lo que se verá obligado a envolver. Puede intentar deshabilitarlo en el TextBox, o en el embalaje Grid.

<DataTemplate x:Key="NotesTemplate"> 
    <Grid ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Use the box below to record any general notes associated with this item." Style="{StaticResource Default}" /> 
     <TextBox TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" Grid.Row="1" Margin="20" Text="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" /> 
    </Grid> 
</DataTemplate> 
+0

Eso no funcionó, pero este enlace SO me llevó el 99% del camino hasta allí: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior. Lo único que no sé es si cambian el tamaño de la ventana a una resolución más pequeña, la caja conserva el ancho original, pero no estoy seguro si eso me importa o no, y me inclino por no hacerlo. – RubyHaus

+0

@digitall: Acabo de ejecutar el código aquí y funcionó bien (solo la cuadrícula). Quizás los otros controles de envoltura lo estropeen. – MichaelS

+0

En una cuadrícula con 8 columnas (que tienen una columna establecida en automático), un cuadro de texto con un columnspan = "8", el ajuste no funciona, el cuadro de texto aumenta su tamaño automáticamente; ( – lunair