【问题标题】:Custom Font working in Uno.WASM, but not working in Uno.UWP自定义字体在 Uno.WASM 中工作,但在 Uno.UWP 中不工作
【发布时间】:2021-06-09 11:27:04
【问题描述】:

由于搜索了一段时间没有看到有用的东西,我决定在这里问:

我有一个小型测试项目,只是为了从互联网导入自定义图标字体。 目前的程序如下: 我的 MainApp.xaml 由一个 Textblock 组成,它引用 Styles.xaml 中的一个 Style-element,它又引用了一个 FontFamily,我在其中加载每个平台的 ttf 文件。

在 WASM 中效果很好(base64 URI),但在 UWP 中我根本无法显示字体图标。 Style.xaml 由 App.xaml 完美导入,Size 被应用,但 FontFamily-Tags 似乎有问题。

我试过了:

  1. 手动安装我的字体 => 工作就像一个魅力。所以它可能不是字体文件?
  2. https://platform.uno/docs/articles/features/custom-fonts.html ,但没有帮助。
  3. https://blog.mzikmund.com/2020/01/custom-fonts-in-uno-platform/ 并没有太大变化。
  4. https://github.com/MartinZikmund/blog-2020/tree/master/Uno.CustomFonts 即使在这里交叉引用后,我也无法让它工作。
  5. https://github.com/unoplatform/calculator/blob/uno/src/Calculator.Shared/Styles.xaml 我还与官方的计算器端口进行了交叉检查,但即使按照他们所做的那样进行设置,也没有任何改变。
  6. 重新安装 VS(我使用社区版)。 这是我的代码:

MainApp.xaml:

<Page
    x:Class="Testing.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Testing"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock Text="L"  Style="{ThemeResource IconTextStyle}" />
    </Grid>
</Page>

Styles.xaml:

<ResourceDictionary
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
            xmlns:xamarin="http://uno.ui/xamarin"
            xmlns:macos="http://uno.ui/macos"
            xmlns:wasm="http://uno.ui/wasm"
            xmlns:skia="http://uno.ui/skia"
            xmlns:win="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"
            mc:Ignorable="xamarin wasm macos skia"
    >


    <win:FontFamily x:Key="IconScratchedFontFamily">ms-appx:///Assets/PWSmallIcons.ttf#Small-Icons-Scratched</win:FontFamily>
    <macos:FontFamily x:Key="IconScratchedFontFamily">ms-appx:///Assets/PWSmallIcons.ttf#Small-Icons-Scratched</macos:FontFamily>
    <wasm:FontFamily x:Key="IconScratchedFontFamily">Small-Icons-Scratched</wasm:FontFamily>
    <skia:FontFamily x:Key="IconScratchedFontFamily">ms-appx:///Assets/PWSmallIcons.ttf#Small-Icons-Scratched</skia:FontFamily>

    <win:FontFamily x:Key="IconClearFontFamily">ms-appx:///Assets/PWSmallIconsFree.ttf#Small-Icons-Free</win:FontFamily>
    <macos:FontFamily x:Key="IconClearFontFamily">ms-appx:///Assets/PWSmallIconsFree.ttf#Small-Icons-Free</macos:FontFamily>
    <wasm:FontFamily x:Key="IconClearFontFamily">Small-Icons-Free</wasm:FontFamily>
    <skia:FontFamily x:Key="IconClearFontFamily">ms-appx:///Assets/PWSmallIconsFree.ttf#Small-Icons-Free</skia:FontFamily>

    <Style TargetType="TextBlock" x:Key="IconTextStyle">
        <Setter Property="FontFamily"
            Value="{StaticResource IconScratchedFontFamily}" />
        <Setter Property="FontWeight"
            Value="Normal" />
        <Setter Property="FontSize"
            Value="116" />
    </Style>
</ResourceDictionary>

App.xaml:

<Application
    x:Class="Testing.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Testing">

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ms-appx:///Styles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

</Application>

【问题讨论】:

    标签: c# xaml fonts uno-platform


    【解决方案1】:

    找到解决办法:

        <win:FontFamily x:Key="IconScratchedFontFamily">ms-appx:///Assets/PWSmallIcons.ttf#PWSmallIcons</win:FontFamily>
        <macos:FontFamily x:Key="IconScratchedFontFamily">ms-appx:///Assets/PWSmallIcons.ttf#PWSmallIcons</macos:FontFamily>
    
    

    背景:#后面的部分表示字体的名称,因为它写在.ttf文件中,而不是我要引用的字体名称 strong>,如果你仔细想想,这很明显。

    用我提供的代码几乎不可能弄清楚,所以我决定为遇到此问题的其他人更新我的问题。

    【讨论】:

    • 太好了,您找到了解决方案!顺便说一句,如果您删除“ms-appx:///Assets/PWSmallIcons.ttf#”并保留FontName PWSmallIcons,您应该得到相同的结果。
    【解决方案2】:

    对于 Winma​​cOS,在 Resources 中定义 FontFamily 的方法是仅使用您的 FontName情况可能是这样的:

    <win:FontFamily x:Key="IconScratchedFontFamily">Small-Icons-Scratched</win:FontFamily>
    <macos:FontFamily x:Key="IconScratchedFontFamily">Small-Icons-Scratched</macos:FontFamily>
    

    <win:FontFamily x:Key="IconClearFontFamily">Small-Icons-Free</win:FontFamily>
    <macos:FontFamily x:Key="IconClearFontFamily">Small-Icons-Free</macos:FontFamily>
    

    有了这个,您应该能够在任何样式中使用您的FontFamily 定义。

    希望这会有所帮助。-

    【讨论】:

    • 不起作用,但帮助我找到了解决方案,因为我误解了 FontFamily-Tag 的行为。谢谢你的想法。
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2021-09-05
    • 2021-11-26
    相关资源
    最近更新 更多