Pytanie Jak uzyskać WPF DataGrid z komórkami, które zawijają tekst zamiast go obcinać?


Co należy zrobić, aby uzyskać element DataFrid WPF z komórkami, które zawijają tekst zamiast go obcinać?

Teraz, gdy tekst jest większy i nie mieści się w kolumnie, tekst jest przycinany, a użytkownicy nie widzą jego wartości, ponieważ właściwość IsReadOnly obiektu DataGrid jest prawdziwa. To, czego chcę, to to, że tekst w komórkach zostanie zawinięty, a wysokość komórki (BEZ SZEROKOŚCI KOMÓRKOWEJ) zwiększy ilość potrzebną do wyświetlenia całego tekstu.


32
2018-01-12 17:24


pochodzenie




Odpowiedzi:


Możesz spróbować szablonować komórki za pomocą TextBlock z włączoną obsługą zawijania tekstu.


8
2018-01-12 17:38



Wielkie dzięki. Już rozwiązałeś problem ze stylami. Mam na myśli, ustawiając właściwość ElementStyle obiektu DataGridTextColumn na coś, co ma ustawienie takie jak "<Właściwość Settera =" TextBlock.TextWrapping "Wartość =" Wrap "/>". Wydaje mi się, że lepiej jest zmienić styl kontroli jako sposób dostosowania formantu zamiast przepisywania jego szablonu. W każdym razie jestem otwarty na sugestie, ponieważ jestem początkującym w WPF. Mój problem polegał na tym, że po prostu nie mogę zastosować stylu a mianowicie TargetType, ponieważ wydaje mi się, że w pewien sposób TextBlock ma określony styl, który nadpisuje zastosowane style alfa TargetType. Dzięki jeszcze raz. - gsi-frank
Używając stylu do tego jest całkiem dobry pomysł, nie myśl, że istnieje lepsze rozwiązanie (przynajmniej w tym konkretnym przypadku) - H.B.
Problem polega na tym, że korzystasz z szablonowej kolumny, w której tracisz podstawowe funkcje, takie jak kopiowanie tekstu. Obecnie stoję w obliczu tego problemu i zamiast tego użyję stylu. - Sven


Dzięki za pomoc @ H.B., Zrobiłem to dla mnie (wyrównanie jest opcjonalne):

<DataGrid.Columns>               
    <DataGridTextColumn Header="Wrapped & centered" Binding="{Binding field}">
        <DataGridTextColumn.ElementStyle>
             <Style>                            
                 <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
                 <Setter Property="TextBlock.TextAlignment" Value="Center"/>
             </Style>
         </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>
</DataGrid.Columns>

73
2017-08-13 13:25



Dla innych: Jeśli to rozwiązanie nie działa, spróbuj dostosować szerokość kolumny. Będzie próbował rozszerzyć szerokość kolumny, zanim zacznie ją zawijać. - DLeh
Dostosuj szerokość w jaki sposób? Próbuję tutaj kod, ale nie wygląda to inaczej w projektancie WPF w Visual Studio. - Stealth Rabbi
Ustaw właściwość Width na DataGridTextColumn podobnie jak: <DataGridTextColumn Header = "Opakowane i wyśrodkowane" Binding = "{Pole bindowania}" Szerokość = "200"> - Rossco
Możesz to zrobić Width="*" co spowoduje, że wypełni całą przestrzeń, ale nie pozwoli na to większy pojemnik. - Anthony Nichols


Zrobiłem coś podobnego do rozwiązania D. Rossosa. Kopalnia jest jednak do wielokrotnego użytku, jeśli masz więcej kolumn, które wymagają zawijania.

<UserControl.Resources>
    <Style TargetType="{x:Type TextBlock}" x:Key="WrapText">
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
</UserControl.Resources>

<DataGrid.Columns>
    <DataGridTextColumn IsReadOnly="False" Header="Address" 
     Binding="{Binding Address}" ElementStyle="{StaticResource WrapText}" Width="150"/>
</DataGrid.Columns>

12
2018-05-09 08:28