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>
1
Scott Salyer 26 lipiec 2011, 09:35

3 odpowiedzi

Najlepsza odpowiedź

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:

Jak rozszerzyć lub zmniejszyć TextBlock w lewej kolumnie Grid w szablonie ListView z zawijaniem tekstu?

1
Rhyous 26 lipiec 2011, 11:04
Właśnie tego szukałem! Jedyny problem, jaki mam i mam nadzieję, że łatwo go rozwiązać, polega na tym, że zawijany tekst powoduje, że rozmiar wiersza, w którym znajduje się zawartość, nie zmienia się, więc zawinięta zawartość znika. Widzę górną część większości postaci, ale nie na tyle, żeby je przeczytać. Dzięki za zabranie mnie tam w 99%!
 – 
Scott Salyer
26 lipiec 2011, 22:27
Na moim pudełku nie widzę tego w mojej aplikacji testowej. Musisz mieć coś w swojej aplikacji, aby wyraźnie ustawić wysokość lub ustawić VerticalAlignment na coś innego niż rozciąganie. Opublikuj swój nowy kod XAML w komentarzach.
 – 
Rhyous
27 lipiec 2011, 01:47
Ach - to było to. Był ListView.ItemContainerStyle z wartością wysokości 30. Zdjąłem to i ta rzecz działa DOKŁADNIE tak, jak chciałem. Gdyby był sposób, aby dać Ci więcej niż jeden głos za, zrobiłbym to.
 – 
Scott Salyer
27 lipiec 2011, 03:13
<ListView HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.ItemTemplate>
        ...
    </ListView.ItemTemplate>
</ListView>
0
James Barrass 18 kwiecień 2018, 19:42

Dodałbym TextWrapping="Wrap" do pierwszego elementu TextBlock.

-1
Mario Vernari 26 lipiec 2011, 10:57
Został dodany, ale próbując wszystkiego, musiałem go przypadkowo usunąć. Ustawienie zostało jednak zignorowane.
 – 
Scott Salyer
26 lipiec 2011, 21:59