2009-03-16 19 views
5

Sto tentando di associare DataColumn Header a DynamicResource utilizzando il seguente codice.Wpf Toolkit. Bind DataGrid Column Header to 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> 

Ma per qualche strano motivo l'intestazione della colonna rimane vuota. StaticResource tuttavia funziona bene. Potrebbe aiutarmi a capire come associare la proprietà Header a DynamicResource.

risposta

8

Prova questo:

<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 ha DataGridColumns che non sono i controlli visivi, in modo da avere alcune regole divertenti. Una di quelle regole divertenti è che solo la proprietà Binding può essere un Binding: tutto il resto deve essere statico. Per aggirare questo problema, puoi creare una risorsa di stile statico che contenga contenuti dinamici.

1

Se si desidera modificare l'intestazione e non si desidera disturbare con gli stili, eseguire questa operazione. (Merito va al di sopra del manifesto)

<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

Prova questa ...

<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

Avete provato esso? Prova a leggere [risposta]. –

3

questo funziona per me con l'internazionalizzazione utilizzando dizionari

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

Questa è la risposta corretta se è necessario un DynamicResource e non è possibile utilizzare una risorsa statica. – gartenriese