我想更改像这样
放在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会失效
答案 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。