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.

4 ответа

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

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

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

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

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

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

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

<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>
Другие вопросы по тегам