Wpf Toolkit. Привязать заголовок столбца DataGrid к DynamicResource

Я пытаюсь привязать заголовок 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.


person Oleg    schedule 16.03.2009    source источник


Ответы (4)


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

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

person vanja.    schedule 09.07.2009

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

<DataGrid>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{x:Null}" Width="120">
            <DataGridTextColumn.Header>
                <TextBlock Text="{DynamicResource gridColumnHeader1}" />
            </DataGridTextColumn.Header>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
person user2618214    schedule 09.11.2014
comment
Это правильный ответ, если вам нужен DynamicResource и вы не можете использовать StaticResource. - person gartenriese; 16.09.2016

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

    <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>
person Morris    schedule 27.04.2010

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

<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>
person Chukiat    schedule 17.03.2013