2011-10-19 18 views
10

Sto cercando di capire come ottenere una casella di testo per avvolgere il suo contenuto, tuttavia la situazione non è esattamente la stessa del tipico scenario "non si avvolge". Il mio testo è contenuto all'interno di un DataTemplate che viene utilizzato all'interno di un'istanza Telerik RadTabControl (utilizzando un ContentTemplatePresenter per determinare quale visualizzare a display) e il codice XAML per il DataTemplate appare così: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> 

Il motivo dico che doesn' t cadere sotto il normale scenario "non si avvolge" è usato per avvolgere fino a quando ho dovuto cambiare la vista per essere ridimensionabile a qualsiasi cosa per supportare le diverse dimensioni dello schermo su cui verrà eseguita l'app. Quando l'ho fatto, TextBox ha smesso di avvolgere perché (presumibilmente) mentre l'utente digita qualcosa, il TextBox dice "Ho bisogno di più spazio" così il genitore si obbliga e la scatola continua a destra indefinitamente (anche se la vista ottiene barre di scorrimento). Ho provato a impostare un MaxWidth usando Binding/RelativeSource, ma dal momento che il genitore è specificamente progettato per far crescere tale approccio non funzionerà. Quello che devo avere è che la scatola dovrebbe essere la larghezza dei suoi "genitori che contengono" VisibleWidth. Vale a dire, se la Finestra stessa è 1024x768, MaxWidth del TextBox dovrebbe essere 1024 e qualsiasi testo successivo verrà automaticamente avvolto, ma se la Finestra cresce a 1280x1024 la casella dovrebbe essere 1280 e il testo di conseguenza. Ho provato questo scenario con questa espressione vincolante, ma senza fortuna:

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

la dimensione della finestra stessa non sta crescendo così se potessi ottenere larghezza della finestra (meno una certa quantità per coprire la larghezza delle schede che sono parte del TabControl) credo che funzionerebbe.

Qualche idea?

+0

finito per trovare il miglior risultato attraverso un altro SO domanda: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior. – RubyHaus

risposta

13

sebbene la vista prende scorrimento

Disabilitare ScrollView orizzontale, in modo che sarà costretto ad avvolgere. Puoi provare a disattivarlo nello stesso TextBox o nel wrapping 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

Che non ha funzionato, ma questo link SO mi ha ottenuto il 99% del modo in: http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior. L'unica cosa che non so è se ridimensionano la finestra con una risoluzione più piccola, la scatola mantiene la larghezza originale, ma non sono sicuro che ciò sia importante per me o no e non mi sto appoggiando al contrario. – RubyHaus

+0

@digitall: ho appena eseguito il codice qui e ha funzionato bene (solo la griglia). Forse gli altri controlli del wrapping lo stanno confondendo. – MichaelS

+0

In una griglia con 8 colonne (che hanno una colonna impostata su auto), una casella di testo con columnspan = "8", il wrap non funziona, la casella di testo aumenta automaticamente le sue dimensioni; ( – lunair