2010-12-16 18 views
7

Tengo un cuadro de texto en mi árbol visual de la siguiente manera ..WPF: cómo detener TextBox de autosizing?

  • Window
    • Grid
      • ListBox
        • ItemTemplate
          • DataTemplate
            • Grid
              • Grid
                • Textbox ...
El cuadro de texto se define como ..

<TextBox Height="Auto" 
     Text="{Binding Path=LyricsForDisplay}" 
     MinHeight="50" 
     MaxHeight="400" 
     Visibility="Visible" 
     VerticalScrollBarVisibility="Auto" 
     IsReadOnly="True" 
     AllowDrop="False" 
     TextWrapping="WrapWithOverflow"> 
</TextBox> 

Cuando se añade texto largo a la variable ligada (LyricsForDisplay) todos los elementos en el cuadro de lista expandir sus cuadros de texto/rejas ancho de permitir a toda la cadena de para ser visto si usa la barra de desplazamiento en la parte inferior que aparece ...

Lo que me gustaría hacer es hacerlo para que las cajas/cuadrículas solo cambien de tamaño si el usuario extiende la ventana ... NO cuando se ingresa un texto largo (Podría simplemente envolver ...)

D ¿Alguien sabe cómo obtener la funcionalidad?

Respuesta

4

Algo necesita contrain la anchura horizontal a disposición de los cuadros de texto, en este caso se quiere parar el ListBox el crecimiento horizontal de forma indefinida:

<ListBox HorizontalScrollBarVisibility="Disabled" 
+0

"La propiedad 'HorizontalScrollBarVisility' no se encontró en el tipo 'ListBox'." – Ryan

+3

Es 'ScrollViewer.HorizontalScrollBarVisibility' en realidad. – decyclone

0

intente configurar el del MaxWidth propiedad en su cuadro de texto

<TextBox Height="Auto" Text="{Binding Path=LyricsForDisplay}" MinHeight="50" MaxHeight="400" Visibility="Visible" VerticalScrollBarVisibility="Auto" MaxWidth="100" IsReadOnly="True" AllowDrop="False" TextWrapping="WrapWithOverflow">       </TextBox> 
9

las siguientes obras:

<ListBox Name="ListBox1" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid> 
        <TextBox TextWrapping="Wrap"></TextBox> 
       </Grid> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Observe el uso de ScrollViewer.HorizontalScrollBarVisibility="Disabled" y TextWrapping="Wrap".

1

dos cambian el código:
1- agregue la etiqueta de borde con su cuadrícula.columna y cuadrícula.row tamaño que está neads.
2- ancho y altura del cuadro de texto establecido en él.
muestra:

<Border x:Name="b" Margin="5"/> 


    <TextBox Height="Auto" 
      Text="{Binding Path=LyricsForDisplay}" 
      MinHeight="50" 
      Width="{Binding ActualWidth, ElementName=b}" 
      Height="{Binding ActualHeight, ElementName=b}" 
      Visibility="Visible" 
      VerticalScrollBarVisibility="Auto" 
      IsReadOnly="True" 
      AllowDrop="False" 
      TextWrapping="Wrap"> 
    </TextBox> 
2

Por desgracia, el cuadro de texto normal no permite autoresize para adaptarse a los padres, pero no AUTORESIZE cuando el texto no encaja.

Para resolver este problema, puede usar un TextBox personalizado que informe un tamaño deseado (0, 0). Es un hack feo, pero funciona.

En el archivo .xaml.cs:

public class TextBoxThatDoesntResizeWithText : TextBox 
{ 
    protected override Size MeasureOverride(Size constraint) 
    { 
     return new Size(0, 0); 
    } 
} 

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

<Window x:Class="YourNamespace.YourWindow" 
    ... 
    xmlns:local="clr-namespace:YourNamespace"> 
     ... 
     <local:TextBoxThatDoesntResizeWithText Height="Auto" 
               Text="{Binding Path=LyricsForDisplay}" 
               MinHeight="50" 
               MaxHeight="400" 
               Visibility="Visible" 
               VerticalScrollBarVisibility="Auto" 
               IsReadOnly="True" 
               AllowDrop="False" 
               TextWrapping="WrapWithOverflow"> 
     </local:TextBoxThatDoesntResizeWithText> 
     ... 
</Window>