自定义字体适用于 Uno.WASM,但不适用于 Uno.UWP
Custom Font working in Uno.WASM, but not working in Uno.UWP
找了半天没看到有用的东西,所以在这里问一下:
我有一个小的测试项目,只是为了从互联网上导入自定义图标字体。
当前程序如下:
我的 MainApp.xaml 由一个单独的文本块组成,它引用 Styles.xaml 中的样式元素,后者又引用一个 FontFamily,我在其中加载每个平台的 ttf 文件。
在 WASM 中效果很好(base64 URI),但在 UWP 中我根本无法显示字体图标。
Style.xaml 被 App.xaml 完美导入,应用了大小,但 FontFamily-Tags 似乎有问题。
我试过了:
- 手动安装我的字体 => 非常有效。所以它可能不是字体文件?
- https://platform.uno/docs/articles/features/custom-fonts.html ,但没有帮助。
- https://blog.mzikmund.com/2020/01/custom-fonts-in-uno-platform/ 反过来,变化不大。
- https://github.com/MartinZikmund/blog-2020/tree/master/Uno.CustomFonts 即使在这里进行了交叉引用,我还是无法让它工作。
- https://github.com/unoplatform/calculator/blob/uno/src/Calculator.Shared/Styles.xaml 我也与官方计算器端口进行了交叉核对,但即使像他们那样设置了东西,也没有任何改变。
- 重新安装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>
对于 Win 和 macOS 在 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
定义。
希望对您有所帮助。-
找到解决方案:
<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文件中,而不是字体名称我想参考它,如果你考虑一下,这是很明显的。
用我提供的代码几乎不可能弄清楚,所以我决定将我的问题更新为其他人 运行 到这个问题。
找了半天没看到有用的东西,所以在这里问一下:
我有一个小的测试项目,只是为了从互联网上导入自定义图标字体。 当前程序如下: 我的 MainApp.xaml 由一个单独的文本块组成,它引用 Styles.xaml 中的样式元素,后者又引用一个 FontFamily,我在其中加载每个平台的 ttf 文件。
在 WASM 中效果很好(base64 URI),但在 UWP 中我根本无法显示字体图标。 Style.xaml 被 App.xaml 完美导入,应用了大小,但 FontFamily-Tags 似乎有问题。
我试过了:
- 手动安装我的字体 => 非常有效。所以它可能不是字体文件?
- https://platform.uno/docs/articles/features/custom-fonts.html ,但没有帮助。
- https://blog.mzikmund.com/2020/01/custom-fonts-in-uno-platform/ 反过来,变化不大。
- https://github.com/MartinZikmund/blog-2020/tree/master/Uno.CustomFonts 即使在这里进行了交叉引用,我还是无法让它工作。
- https://github.com/unoplatform/calculator/blob/uno/src/Calculator.Shared/Styles.xaml 我也与官方计算器端口进行了交叉核对,但即使像他们那样设置了东西,也没有任何改变。
- 重新安装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>
对于 Win 和 macOS 在 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
定义。
希望对您有所帮助。-
找到解决方案:
<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文件中,而不是字体名称我想参考它,如果你考虑一下,这是很明显的。
用我提供的代码几乎不可能弄清楚,所以我决定将我的问题更新为其他人 运行 到这个问题。