2011-01-04 6 views
2

Ich habe eine Grid enthält eine ScrollViewer enthält AccessText. Ich möchte die AccessText die volle Breite der ScrollViewer aufnehmen, die die volle Breite der Grid aufnehmen sollte, ohne Überlauf. Derzeit ist der Inhalt meines AccessText auf der rechten Seite des Bildschirms abgeschnitten, anstatt zu wickeln. Ich habe versucht, AccessText.TextWrapping auf Wrap, WrapWithOverflow zu setzen, und ich habe auch versucht, die Eigenschaft vollständig zu entfernen. Ich wechselte zu einer Grid statt einer StackPanel, weil ich dachte, dass dies die Größe des Inhalts beeinflussen könnte, aber das hat nicht geholfen. Hier ist, was ich habe:WPF: Erhalten von AccessText in ScrollViewer zum Umbruch

<Grid MaxHeight="40"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="Whee a label:" Grid.Column="0"/> 
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" 
        HorizontalScrollBarVisibility="Auto"> 
     <AccessText Text="{Binding MyLongTextField}"/> 
    </ScrollViewer> 
</Grid> 

Antwort

1

Wenn Sie Column Breite auf Auto, die Scroll gesetzt innerhalb es wird nicht durch die „sichtbare Breite“ begrenzt werden von der Säule, so wird es noch genau so viel Platz einnehmen als es braucht. Mit dem Xaml, das du gepostet hast, denke ich, dass Width="*" deinen Bedürfnissen entspricht. Für den ScrollViewer scheint es, als ob er nicht in der Lage sein soll horizontal, sondern nur vertikal zu scrollen. Stellen Sie in diesem Fall HorizontalScrollBarVisibility="Disabled" ein. Andernfalls erhalten Sie eine horizontale Bildlaufleiste.

<Grid MaxHeight="40"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="Whee a label:" Grid.Column="0"/> 
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto" 
        HorizontalScrollBarVisibility="Disabled"> 
     <AccessText TextWrapping="Wrap" Text="{Binding MyLongTextField}"/> 
    </ScrollViewer> 
</Grid> 
+0

Das sieht wie ein Schritt in die richtige Richtung aus. Das Ändern der 'Width' in' * 'hat dazu geführt, dass eine horizontale Bildlaufleiste angezeigt wurde, sodass ich den gesamten Text sehen konnte. Wenn Sie "HorizontalScrollBarVisibility" auf "Disabled" setzen, werden alle Bildlaufleisten entfernt und der Text wird erneut abgeschnitten. :( –

+0

@Sarah Überprüfen Sie meine Antwort, da es den ScrollViewer entfernt, von dem ich annahm, dass Sie ihn nicht benötigten. –

+0

@Sarah Schiffe: Sogar mit TextWrapping = "Wrap" auf dem AccessText setzen? –

0

Wenn Sie wollen einfach die AccessText auf unbestimmte Zeit wickeln, ändern Sie Ihre zweite ColumnDefinitionAuto-* und bewegen Sie den AccessText außerhalb des ScrollViewer wie unten zu sehen ...

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
      <TextBlock Text="Whee a label:" Grid.Column="0"/> 
      <AccessText Grid.Column="1" TextWrapping="Wrap" Text="{Binding MyLongTextField}"/> 
    </Grid> 

Der Grund, den Text würde nicht wickeln, weil der zweite ColumnDefinition auf Auto gesetzt wurde; was im Wesentlichen keine Grenzen um die AccessText erzwingt.

Wenn Sie die ScrollViewer versuchen, dies halten wollen ...

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="40"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="Whee a label:" Grid.Column="0"/> 
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto"> 
     <AccessText TextWrapping="Wrap" Text="{Binding MyLongTextField}"/> 
    </ScrollViewer> 
</Grid> 
+0

Wenn ich dies tue und dann verringern ' "MaxHeight" auf dem "Grid", keine Bildlaufleisten erscheinen, damit ich scrollen kann, um den gesamten Text zu sehen. –

+0

@Sarah Sie haben entweder Bildlaufleisten oder Sie müssen die Höhe erhöhen, damit der Text bei Bedarf umbrochen werden kann, da der Umbruch einen Text erfordert erhöhte Höhe –

+0

Ich möchte eine vertikale Bildlaufleiste, keine horizontale Bildlaufleiste, und ich möchte den Text so zu wickeln, dass eine vertikale Bildlaufleiste angezeigt wird wie erforderlich –

0

Diese endete mir geben, was ich wollte:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Text="Whee a label:" Grid.Column="0"/> 
    <ScrollViewer Grid.Column="1" MaxHeight="40" 
        HorizontalScrollBarVisibility="Disabled" 
        VerticalScrollBarVisibility="Auto"> 
     <AccessText Text="{Binding CRData.Error}" TextWrapping="Wrap"/> 
    </ScrollViewer> 
</Grid> 

Dank Meleak und Aaron für den Vorschlag * der Verwendung für die Spaltenbreite anstelle von , und zu Meleak für das Vorschlagen Disabled für die horizontale Bildlaufleiste anstelle von Auto.

+0

hinzugefügt Das sieht genau wie die Antwort, die ich gab du oder fehle ich etwas? :) –

Verwandte Themen