You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP中DependencyProperty无法修改TextBlock的FontFamily问题求助

UWP打印报表中TextBlock的FontFamily属性无法通过依赖属性修改的问题

在UWP应用中打印包含TextBlock的报表时,希望根据用户偏好修改TextBlock的FontSize、FontStyle和FontFamily属性。使用DependencyProperty时,FontSize和FontStyle修改生效,但FontFamily未发生变化,需要解决该问题。

相关代码

XAML代码

<Page.DataContext>
    <vm:MainViewModel x:Name="mainViewModel" />
</Page.DataContext>

<Paragraph>
    <InlineUIContainer>
        <ItemsControl ItemsSource="{Binding PrintArterialVelocities}"
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Stretch"
                      Margin="0">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="2"/>
                            <ColumnDefinition Width="175"/>
                            <ColumnDefinition Width="80"/>
                            <ColumnDefinition Width="173"/>
                            <ColumnDefinition Width="175"/>
                            <ColumnDefinition Width="80"/>
                        </Grid.ColumnDefinitions>
                        <Border BorderBrush="Black" BorderThickness="0,0,0,1" Grid.Column="1" Grid.ColumnSpan="2"/>
                        <Border BorderBrush="Black" BorderThickness="0,0,0,1" Grid.Column="4" Grid.ColumnSpan="2"/>
                        
                        <TextBlock Grid.Column="1" local:VelocitiesText.Text="{Binding ArteryName}"/>
                        <TextBlock Grid.Column="2" local:VelocitiesText.Text="{Binding ArteryVelocity}"/>
                        <TextBlock Grid.Column="4" local:VelocitiesText.Text="{Binding ArteryName}"/>
                        <TextBlock Grid.Column="5" local:VelocitiesText.Text="{Binding ArteryVelocity}"/>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </InlineUIContainer>
</Paragraph>

回调类C#代码

public class VelocitiesText
{
    public static string GetText(DependencyObject obj)
    {
        return (string)obj.GetValue(TextBlock.TextProperty);
    }

    public static void SetText(DependencyObject obj, string value)
    {
        obj.SetValue(TextBlock.TextProperty, value);
    }

    public static readonly DependencyProperty TextProperty =
        DependencyProperty.RegisterAttached("Text", typeof(string), typeof(VelocitiesText), new PropertyMetadata(string.Empty, callback));

    public static void callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var Txt = (TextBlock)d;
        var InsertString = (string)e.NewValue;            
        Txt.Text = InsertString;

        // Txt.FontFamily= new Windows.UI.Xaml.Media.FontFamily(TextCalls.SelectedFontFamilyName);
        Txt.FontFamily= TextCalls.SelectedFontFamily;
        Txt.FontSize = double.Parse(TextCalls.SelectedFontSize);
        if (TextCalls.SelectedFontStyle == "Italic")
            Txt.FontStyle = Windows.UI.Text.FontStyle.Italic;          
    }
}

解决方案

1. 验证SelectedFontFamily的有效性

  • 确认TextCalls.SelectedFontFamily是正确初始化的FontFamily对象。可以先硬编码一个系统存在的字体测试,比如:
    Txt.FontFamily = new Windows.UI.Xaml.Media.FontFamily("Arial");
    
    如果硬编码生效,说明原SelectedFontFamily对象存在问题,比如字体名称错误或未正确加载。

2. 清除继承的FontFamily值

TextBlock的FontFamily可能被父容器的样式、主题资源或模板默认值覆盖,可先清除原有值再设置:

Txt.ClearValue(TextBlock.FontFamilyProperty);
Txt.FontFamily = TextCalls.SelectedFontFamily;

3. 延迟到控件加载完成后设置

DataTemplate中的控件初始化时,回调可能过早导致设置被后续逻辑覆盖,可注册Loaded事件延迟设置:

Txt.Loaded += (sender, args) =>
{
    var textBlock = sender as TextBlock;
    textBlock.FontFamily = TextCalls.SelectedFontFamily;
};

4. 检查TextCalls静态属性的更新状态

确认用户修改偏好后,SelectedFontFamily已更新为最新的FontFamily实例。可在回调中打印验证:

Debug.WriteLine($"当前选中字体:{TextCalls.SelectedFontFamily.Source}");

内容的提问来源于stack exchange,提问作者Naweed Ashraf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:03:12