WPF:WrapPanel wrapt nicht
-
Ich habe ein WrapPanel in dem Content eines Expander der im ItemTemplate einer ListBox steht.Aber die Textblöcke im Wrappanel kommen nicht ein eine neue Zeile wenn ich die Liste mit einen GridSplitter zusammen schiebe.Stattdessen erscheint der Scrollbar der Liste.Hat einer eine Idee woran das liegen könnte?
<ListBox.ItemTemplate> <DataTemplate> <Expander ExpandDirection="Down" TextSearch.Text="{Binding Path=Kurzname}"> <Expander.Header> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding Path=Kurzname}" VerticalAlignment="Center" Margin="2 0 2 0" HorizontalAlignment="Left"/> <StackPanel HorizontalAlignment="Right" Grid.Column="1" Grid.Row="0" Orientation="Horizontal"> <my:TelefonButton ToolTip="Anrufen"/> <Button Padding="1" Height="20" Width="25" Margin="2 0 2 0" Click="OpenDetails_Click" ToolTip="Stammdaten ansehen"> <Image Source="../Bilder/View.png"/> </Button> <Button Padding="1" Height="20" Width="25" Margin="0" Click="OpenKontakt_Click" ToolTip="Kontakt anlegen"> <Image Source="../Bilder/Kontakt.png"/> </Button> </StackPanel> </Grid> </Expander.Header> <Expander.Content> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <WrapPanel Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Stretch"> <TextBlock Text="Name:" FontWeight="bold"/> <TextBlock Text="{Binding Path=Name}" Margin="2 0 0 0" /> <TextBlock Name="LabelGeburtstag" Text="Geburtstag:" FontWeight="bold" Margin="2 0 2 0"/> <TextBlock Name="DataGeburtstag" Text="{Binding Path=Geburtstag,StringFormat=dd.MM.yy}" Margin="2 0 2 0" /> <TextBlock Name="LabelBranche" Visibility="Collapsed" Text="Branche:" FontWeight="bold" Margin="2 0 2 0"/> <TextBlock Name="DataBranche" Visibility="Collapsed" Text="{Binding Path=Branche}" Margin="2 0 2 0" /> </WrapPanel> <my:KommentarView Name="Kommentare" Grid.Row="1"/> </Grid> </Expander.Content> </Expander> </DataTemplate> </ListBox.ItemTemplate>
-
Versuch doch mal beim Textblock einfach ein "TextWrapping = "Wrap" ".
-
Ich will nicht das innerhalb der Blöcke gewrapt wird,ich will das die Blöcke wrapen.Ausserdem brings nicht weil sowieso nur jeweils ein Wort in den verschiedenen Blöcken steht.
-
Probiere mal folgendes (nur Pseudo):
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid x:Name="heightControl" /> <WrapPanel Grid.Row="0" Orientation="Horizontal" Height="{Binding ActualHeight, ElementName=heightControl}"> <TextBlock Text="Name:" FontWeight="bold"/> <TextBlock Text="{Binding Path=Name}" Margin="2 0 0 0" /> <TextBlock Name="LabelGeburtstag" Text="Geburtstag:" FontWeight="bold" Margin="2 0 2 0"/> <TextBlock Name="DataGeburtstag" Text="{Binding Path=Geburtstag,StringFormat=dd.MM.yy}" Margin="2 0 2 0" /> <TextBlock Name="LabelBranche" Visibility="Collapsed" Text="Branche:" FontWeight="bold" Margin="2 0 2 0"/> <TextBlock Name="DataBranche" Visibility="Collapsed" Text="{Binding Path=Branche}" Margin="2 0 2 0" /> </WrapPanel> <my:KommentarView Name="Kommentare" Grid.Row="1"/> </Grid>
Wenn das funktioniert habe ich eine Passende Theorie
-
Das sorgt dafür das das WrapPanel verschwindet,aber die Weitenberechnung des Headers weiter beeinflusst.
Daher nehme ich an das das heightControl 0 hoch ist.
-
Stimmt, da es mit Auto initialisiert wurde, habe da gerade nicht aufgepasst.
Initialisier es einfach mit einem Wert, durch den GridSplitter den du erwähntest (der aber nicht im Code ist) kannst du es auch verändern.Die gesamte Problematik ist einfach, der ItemsPresentder der ListBox liegt in einem ScrollViewer, und dieser gibt den Child elementen immer Maximal platz, darum Wrappt er nicht.
Was auch gehen könnte ist wenn du den Horizontal Scroll Viewer der ListBox auf Disabled stellst.
ScrollViewer.HorizontalScrollBarVisibility="Disabled" als Attached Property
-
Danke sehr.Es hat geklappt.