2009-03-16 9 views
5

J'essaie de lier DataColumn Header à DynamicResource en utilisant le code suivant.Wpf Toolkit. Lier l'en-tête de colonne DataGrid à DynamicResource

<Window.Resources> 
    <sys:String x:Key="HeaderText">Header Text</sys:String> 
</Window.Resources> 
<Grid> 
    <tk:DataGrid> 
     <tk:DataGrid.Columns> 
      <tk:DataGridTextColumn Header="{DynamicResource HeaderText}" Width="100"/> 
     </tk:DataGrid.Columns> 
    </tk:DataGrid> 
</Grid> 

Mais pour une raison étrange, l'en-tête de colonne reste vide. StaticResource fonctionne cependant bien. Pourriez-vous s'il vous plaît m'aider à comprendre comment lier cette propriété Header à un DynamicResource.

Répondre

8

Essayez ceci:

<Window.Resources> 
    <sys:String x:Key="HeaderText">Header Text</sys:String> 
    <Style x:Key="HeaderTextStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}"> 
     <Setter Property="Content" Value="{DynamicResource HeaderText}" /> 
    </Style> 
</Window.Resources> 
<Grid> 
    <tk:DataGrid> 
     <tk:DataGrid.Columns> 
      <tk:DataGridTextColumn HeaderStyle="{StaticResource HeaderTextStyle}" Width="100"/> 
     </tk:DataGrid.Columns> 
    </tk:DataGrid> 
</Grid> 

DataGrid WPF Toolkit a de DataGridColumns qui ne sont pas des contrôles visuels, donc ils ont des règles drôles. Une de ces règles amusantes est que seule la propriété Binding peut être une liaison - tout le reste doit être statique. Pour contourner cela, vous pouvez créer une ressource de style statique qui contient du contenu dynamique.

1

Si vous voulez juste changer l'en-tête et ne voulez pas vous embêter avec les styles, faites-le. (Crédit va à l'affiche ci-dessus)

<Window.Resources> 
    <sys:String x:Key="HeaderText">Header Text</sys:String> 
    <TextBlock x:Key="HeaderSR" Text="{DynamicResource HeaderText}"/> 
</Window.Resources> 
<Grid> 
    <tk:DataGrid> 
     <tk:DataGrid.Columns> 
      <tk:DataGridTextColumn Header="{StaticResource HeaderSR}" Width="100"/> 
     </tk:DataGrid.Columns> 
    </tk:DataGrid> 
</Grid> 
1

Essayez cette ...

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding InputDate,Mode=OneWay,StringFormat='{}{0:dd MMM yy}'}" Width="70" > 
      <DataGridTextColumn.Header> 
       <TextBlock Text="{DynamicResource ResourceKey=inputDate}" /> 
      </DataGridTextColumn.Header> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Avez-vous tester? Essayez de lire [réponse]. –

3

cela fonctionne pour moi avec des dictionnaires en utilisant l'internationalisation

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{x:Null}" Width="120"> 
      <DataGridTextColumn.Header> 
       <TextBlock Text="{DynamicResource gridColumnHeader1}" /> 
      </DataGridTextColumn.Header> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

C'est la bonne réponse si vous avez besoin d'une ressource dynamique et que vous ne pouvez pas utiliser une source statique. – gartenriese

Questions connexes