4 Stimmen

Der Textumbruch erweitert die Spalte, um den Text anzupassen.

Ich habe ein einfaches Raster definiert:

<Grid Margin="0,5,0,0">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="48"></ColumnDefinition>
    <ColumnDefinition Width="Auto"></ColumnDefinition>
   </Grid.ColumnDefinitions>

Dann versuche ich, einen Inhalt wie diesen zu binden:

<TextBlock TextWrapping="Wrap" Grid.Column="3" Text="{Binding Text}">

So eingestellt, wird der Text nicht umbrochen. Die Spalte wird einfach erweitert, um den Text anzupassen. Wenn ich die Breite auf einen festen Wert für die letzte Spalte einstelle, funktioniert der Umbruch wie erwartet. Das Problem dabei ist, dass die Spalte auf einer festen Größe bleibt, wenn der Benutzer das Fenster vergrößert. Wie kann ich die Spalte dynamisch an die Breite des Gitters anpassen, aber dennoch den Text darin umbrechen?

5voto

Bryan Punkte 3371

Eine Breite von "*" wird der verbleibende Platz gleichmäßig zwischen den Spalten aufgeteilt, indem "*" . Wenn Sie eine einzelne Spalte mit Width="*" wird diese Spalte den gesamten verbleibenden Platz erhalten. Wenn Sie 2 Spalten haben mit Width="*" erhält jeder die Hälfte des verbleibenden Platzes.

Hier ist ein Guter Artikel über die Dimensionierung der Gitter die auch die Größe der Sterne einschließt.

5voto

Simon_Weaver Punkte 129442

Es gibt einen frustrierenden Fall, den ich entdeckt habe, bei dem man sogar mit Width="*" und das ist, wenn Sie IsSharedSizeScope= true .

<Border BorderBrush="Red" BorderThickness="1">
    <StackPanel Grid.IsSharedSizeScope="True">

        <Grid HorizontalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="G1"/>
                <ColumnDefinition Width="Auto" SharedSizeGroup="G2" />
                <ColumnDefinition Width="*"  SharedSizeGroup="G3" />
            </Grid.ColumnDefinitions>

            <TextBlock Text="Col0" Grid.Column="0" Margin="0,0,5,0"/>
            <TextBlock Text="Col1" Grid.Column="1" Margin="0,0,5,0"/>

            <TextBlock Text="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" TextWrapping="Wrap" Grid.Column="2"/> 
        </Grid>

    </StackPanel>                   

</Border>

Das wird nicht einpacken, aber wenn Sie die Grid.IsSharedScopeSize a false dann tut es das.

Ich habe noch keine Lösung gefunden, aber das kann ein weiterer Grund dafür sein, dass es nicht funktioniert.

1voto

Versuchen Sie dies:

<Grid Margin="0,5,0,0">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="48"></ColumnDefinition>
    <ColumnDefinition Name="ParentColumn" Width="Auto"></ColumnDefinition>
   </Grid.ColumnDefinitions>
   <TextBlock TextWrapping="Wrap" Grid.Column="3" Text="{Binding Text}"
      MaxWidth="{Binding ActualWidth, ElementName=ParentColumn}">

-1voto

Thomas Punkte 3290

Seine Breite auf "*" setzen

-1voto

Euphoric Punkte 12272

Sie sollten Auto nur dann verwenden, wenn Sie die Größe der Spalte/Zeile vom Inhalt der Spalte/Zeile abhängig machen wollen. Wenn Sie "restlichen Platz zuweisen" wollen, verwenden Sie "*". In Ihrem Fall muss TextBlock wissen, wie viel Platz es vor der eigentlichen Messung hat, damit es sagen kann, wo der Text umbrochen werden soll.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X