2009-03-16 3 views
5

Я пытаюсь привязать заголовок DataColumn к DynamicResource, используя следующий код.Wpf Toolkit. Bind 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> 

Но по какой-то странной причине заголовок столбца остается пустым. Однако StaticResource работает хорошо. Не могли бы вы помочь мне выяснить, как связать это свойство заголовка с каким-то DynamicResource.

ответ

8

Попробуйте это:

<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 имеет DataGridColumns, которые не являются визуальными элементами управления, поэтому у них есть какие-то смешные правила. Одно из этих смешных правил заключается в том, что только свойство Binding может быть привязкой - все остальное должно быть статическим. Чтобы обойти это, вы можете создать ресурс статического стиля, который содержит динамический контент.

1

Если вы просто хотите изменить заголовок и не хотите беспокоиться о стилях, сделайте это. (Заслуга выше постер)

<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

Попробуйте это ...

<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

ли вы это проверить? Попробуйте прочитать [ответ]. –

3

это работает для меня с интернационализацией использованием словарей

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

Это правильный ответ, если вам нужен DynamicResource и не может использовать StaticResource. – gartenriese

Смежные вопросы