问题描述:

这是我的我的目的,大致的代码如下:
<UserControl x:Class="BookDispenser.Views.AccessibilityReservedItemList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converter="clr-namespace:BookDispenser.Converters"
mc:Ignorable="d"
d:DesignHeight="1500" d:DesignWidth="800">
<UserControl.Resources>
<converter:CalcFontSize x:Key="CalcFontSize" />
<converter:MultiplyConverter x:Key="MultiplyConverter" />
<Style x:Key="ColumnHeaderStyle" TargetType="DataGridColumnHeader"> //这里定义DataGrid表头样式,包括字体大小
<Setter Property="FontSize"
/*
这里通过一个Converter去改变表头文字的大小,FontSizeScale是动态值,从ViewModel中过来,表示缩放比例,比如0.8, 1.2。
CalcFontSize是一个Converter,实现FontSizeScale和ConverterParameter相乘,即30 * FontSizeScale。
但是很可惜,达不到效果。同样的方式应用于TextBlock,Button中是没有问题的
*/
Value="{Binding FontSizeScale,Converter={StaticResource CalcFontSize}, ConverterParameter=30}">
</Setter>
<Setter Property="Foreground" Value="White"></Setter>
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="Padding" Value="0 10 20 10"></Setter>
<Setter Property="VerticalContentAlignment" Value="Center"></Setter>
<Setter Property="BorderThickness" Value="0 0 1 0"></Setter>
</Style>
</UserControl.Resources>
<DataGrid AutoGenerateColumns="False" x:Name="dgBookList" ItemsSource="{Binding BookList}" Height="720" GridLinesVisibility="Horizontal" IsReadOnly="True" Margin="0 30">
<DataGrid.Columns>
<DataGridTemplateColumn Header="预约待取项目" Width="420" HeaderStyle="{StaticResource ColumnHeaderStyle}"
CellStyle="{StaticResource ColumnCellStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
/*
还有这个地方也是不生效的
*/
<TextBlock Style="{StaticResource cellTextBlock}" HorizontalAlignment="Center" Text="{Binding BookNumber}"
FontSize="{Binding FontSizeScale,Converter={StaticResource CalcFontSize}, ConverterParameter=20}">
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="预约待取期限" Width="435" HeaderStyle="{StaticResource ColumnHeaderStyle}" CellStyle="{StaticResource ColumnCellStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Style="{StaticResource cellTextBlock}" HorizontalAlignment="Center" Text="{Binding ReservedDate}">
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="158" Header="选取项" HeaderStyle="{StaticResource ColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox FontSize="12" FontWeight="Bold" Foreground="White" HorizontalAlignment="Center" Margin="0 15 0 0">
<CheckBox.LayoutTransform>
<ScaleTransform ScaleX="2.5" ScaleY="2.5" />
</CheckBox.LayoutTransform>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UserControl>
如代码所示,ColumnHeaderStyle用于定义DataGrid表头样式,包括字体大小。
我通过一个Converter去改变表头文字的大小,FontSizeScale是动态值,从ViewModel中过来,表示缩放比例,
比如0.8, 1.CalcFontSize是一个Converter,实现FontSizeScale和ConverterParameter相乘,即30 * FontSizeScal
但是很可惜,达不到效果。同样的方式应用于TextBlock,Button中是没有问题的。
同样在DataTemplate中设置TextBlock的FontSize也是不生效的
提出问题:
基于我上面的提到的两个地方,一个是表头文字大小,一个是cell文字大小,真的没有办法去动态改变吗?
求解决方案,期待各位的指点,感谢!