失败绑定放入DataGrid的标签的字体大小

时间:2016-05-12 05:48:13

标签: c# wpf binding

我想更改像这样

放在DataGrid中的标签的字体大小
<DataGrid>
    <DataGrid.Columns>
         <DataGridTextColumn>
              <DataGridTextColumn.Header>
                   <Label Name="LabelInGrid" Content="{DynamicResource LabelNameIn}" FontSize="{Binding ContentFontSize}"/>
              </DataGridTextColumn.Header>
         </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
<Label Name="LabelOutGrid" Content="{DynamicResource LabelNameOut}" FontSize="{Binding ContentFontSize}"/>

如果我更改ContentFontSize的值。 LabelOutGrid的FontSize会改变,但LabelInGrid会失效

1 个答案:

答案 0 :(得分:0)

运行此应用程序时,您应该在Visual Studio输出窗口中看到一些绑定错误。这是因为它试图在ContentFontSize对象上找到绑定的Label属性,而不是实际的DataContext

将您的Label元素更改为以下内容:

<Label Name="LabelInGrid" Content="Header" 
       FontSize="{Binding DataContext.ContentFontSize, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>

或者

<Label Name="LabelInGrid" Content="Header" 
       DataContext="{Binding DataContext,RelativeSource={RelativeSource AncestorType=DataGrid}}"
       FontSize="{Binding ContentFontSize}"/>

DataGridColumns不是FrameworkElement因此它们不会继承父级的DataContext,因此您必须使用RelativeSource绑定来获取父级的DataContext。

还有其他方法可以实现此目的:1)每当DataGrid的DataContext发生更改时,使用DataBinding proxy 2)Forwarding DataGrid的DataContext到DataGridColumns。