Monday, May 14, 2012

Silverlight: Binding Resource to DataGridTextColumn.Header

In the last two days, since it’s the end of our block I have decided to do some minor work (that way a check in won’t really effect the block). One of the changes I thought of was replacing all the free text in our Silverlight application with text from a resource file.

Everything worked like a charm except for the Header of DataGridTextColumn. My original Data Binding looked like this:

  1. <slData:DataGridTextColumn Header="{Binding Path=Type, Source={StaticResource StringsRes}}" Binding="{Binding Title}"/>

But the DataGrid columns in the application looked like this:

DataGrid-header-column-bug

In the end I found the solution here:

  1. <slData:DataGridTextColumn Binding="{Binding TypeString}" >
  2.     <sdk:DataGridTextColumn.HeaderStyle>
  3.         <Style TargetType="primitives:DataGridColumnHeader" >
  4.             <Setter Property="ContentTemplate">
  5.                 <Setter.Value>
  6.                     <DataTemplate>
  7.                         <TextBlock Text="{Binding Path=Type, Source={StaticResource StringsRes}}"/>
  8.                     </DataTemplate>
  9.                 </Setter.Value>
  10.             </Setter>
  11.         </Style>
  12.     </sdk:DataGridTextColumn.HeaderStyle>
  13. </slData:DataGridTextColumn>

Though I am still searching for a generic solution and not something I have to copy paste for each DataGrid Column…

 

//TODO: Check if this was fixed in SL5. If so post the elegant solution

IceRocket Tags: