Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WPF: mandare il testo a capo nelle celle della DataGrid

Quando lavoriamo con la DataGrid in WPF, per visualizzare del testo utilizziamo degli oggetti DataGridTextColumn. Questi oggetti hanno una limitazione: non ci sono delle proprietà che permettano di specificare se il testo debba essere mandato a capo automaticamente a seconda delle dimensioni in larghezza della colonna, un po' come si può fare in Microsoft Excel.

La soluzione non è particolarmente complessa. Si ricorre, infatti, a un oggetto DataGridTemplateColumn (un tipo generico che consente di personalizzare al massimo il template delle celle) al cui interno si usano una TextBox per l'editing e un TextBlock per la visualizzazione; per tali controlli è infatti possibile assegnare la proprietà TextWrapping che ci consente di mandare a capo il testo.

Ecco lo XAML che realizza quanto descritto:

                <DataGridTemplateColumn x:Name="ColumnName" Header="Intestazione Colonna">
                    <!-- Template per l'editing. Mode=TwoWay è in realtà superfluo, essendo
                         il default per la TextBox -->
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=DatoInBinding, Mode=TwoWay}" TextWrapping="Wrap"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <!-- Template per la visualizzazione. Mode=OneWay è in realtà superfluo, essendo
                                 il default per il TextBlock -->
                            <TextBlock Text="{Binding Path=DatoInBinding, Mode=OneWay}" TextWrapping="Wrap"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

Impostando TextWrapping su Wrap il testo verrà mandato a capo nel caso in cui la larghezza della colonna sia troppo stretta per visualizzarlo interamente. In entrambi i casi per il binding ho utilizzato un identificatore DatoInBinding che chiaramente va sostituito con la proprietà di interesse dell'oggetto che è data-bound.

Alessandro

Print | posted on giovedì 14 ottobre 2010 19:56 | Filed Under [ Windows Presentation Foundation Visual Studio 2010 ]

Powered by:
Powered By Subtext Powered By ASP.NET