Tworzę ListView, który musi mieć pięć kolumn - pierwsza musi mieć tekst, który może mieć dowolną długość i musi być zawijany za każdym razem, gdy zmienia się rozmiar okna (oprócz zmiany wysokości wiersza, aby zawinięty tekst był widoczny) i pozostałe cztery kolumny mają statyczną szerokość 45. Szukałem nad tym godzinami i każde rozwiązanie, na które natrafię, albo wymaga statycznej szerokości, albo nie działa.
Rozwiązania próbowane:
Szerokości kolumn auto, 1 *, 2 * itd. (ustawienia ignorowane) DockPanel (ustawienia ignorowane) WrapPanel (ignorowane) Ustawienie szerokości na RelativeSource elementu nadrzędnego dla ActualWidth (ignorowane)
Jakieś pomysły? Wygląda na to, że znaczna liczba osób miała ten sam problem, ale zdecydowanie wolałbym nie iść statyczną trasą szerokości dla tej kolumny. Zwłaszcza, że treść jest po prostu odcinana, kiedy i tak to robię (nawet z height="Auto" dla wiersza). Szerokość całego okna może wynosić nawet 1024, ale może też wynosić 1600+, dlatego chcę dynamicznego zmiany rozmiaru. W ten sposób mniejsze ekrany będą miały zawijanie treści, a większe ekrany będą pokazywać tylko jedną linię, ponieważ treść będzie pasować.
Oto Xaml:
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="45" />
<ColumnDefinition Width="45" />
<ColumnDefinition Width="45" />
<ColumnDefinition Width="45" />
</Grid.ColumnDefinitions>
<!-- This is the TextBlock that needs to wrap its content (and
change the height of the row (so the full content is still
visible) to whatever the available space is, but should not
make overall ListView wider than the parent's width. -->
<TextBlock Text="{Binding Content}" Padding="20,6,6,6" />
<!-- These four blocks will have other content eventually, but only need
to be 45 wide -->
<TextBlock Text="X" Grid.Column="1" HorizontalAlignment="Center" />
<TextBlock Text="X" Grid.Column="2" HorizontalAlignment="Center" />
<TextBlock Text="X" Grid.Column="3" HorizontalAlignment="Center" />
<TextBlock Text="X" Grid.Column="4" HorizontalAlignment="Center" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
3 odpowiedzi
Nie takie proste... ale da się to zrobić.
Napisałem dla Ciebie rozwiązanie. W skrócie, użyj Expression Blend, aby utworzyć kopię szablonu ListView i usunąć ScrollViewer otaczający ItemPresenter.
Oto bardziej okropnie wyjaśnienie:
<ListView HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemTemplate>
...
</ListView.ItemTemplate>
</ListView>
Dodałbym TextWrapping="Wrap" do pierwszego elementu TextBlock.
Podobne pytania
Powiązane pytania
Nowe pytania
wpf
Windows Presentation Foundation lub WPF to podsystem do renderowania interfejsów użytkownika w aplikacjach opartych na systemie Windows.