Wpf Toolkit. Привязать заголовок столбца DataGrid к DynamicResource - PullRequest
6 голосов
/ 17 марта 2009

Я пытаюсь привязать заголовок DataColumn к 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 работает хорошо. Не могли бы вы помочь мне выяснить, как связать это свойство Header с некоторым DynamicResource.

Ответы [ 4 ]

8 голосов
/ 09 июля 2009

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

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

4 голосов
/ 09 ноября 2014

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

<DataGrid>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{x:Null}" Width="120">
            <DataGridTextColumn.Header>
                <TextBlock Text="{DynamicResource gridColumnHeader1}" />
            </DataGridTextColumn.Header>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
1 голос
/ 17 марта 2013

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

<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>
1 голос
/ 27 апреля 2010

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

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