2009-03-16 17 views
5

Ich versuche, DataColumn-Header mit dem folgenden Code an DynamicResource zu binden.Wpf Toolkit. Bind DataGrid-Spaltenüberschrift an 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> 

Aber aus irgendeinem seltsamen Grund bleibt Spaltenkopf leer. StaticResource funktioniert jedoch gut. Könnten Sie mir bitte helfen herauszufinden, wie diese Header-Eigenschaft an eine DynamicResource gebunden wird.

Antwort

8

Try this:

<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> 

WPF Toolkit Datagrid Datagridcolumns hat, die nicht Visuelle Kontrollen sind, so haben sie einige lustige Regeln. Eine dieser lustigen Regeln ist, dass nur die Binding-Eigenschaft eine Bindung sein kann - alles andere muss statisch sein. Um dies zu umgehen, können Sie eine statische Stil-Ressource erstellen, die dynamischen Inhalt enthält.

1

Wenn Sie nur die Kopfzeile ändern möchten und nicht mit Stilen belästigen möchten, tun Sie dies. (Kredit geht an oben Plakat)

<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

Try this ...

<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

Haben Sie es testen? Versuchen Sie [Antwort] zu lesen. –

3

das funktioniert für mich bei der Internationalisierung mit Wörterbücher

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

Dies ist die richtige Antwort, wenn Sie eine DynamicResource benötigen und keine StaticResource verwenden können. – gartenriese

Verwandte Themen