当前位置:  开发笔记 > 编程语言 > 正文

如何使用WPF中的Segoe MDL2 Assets字体以编程方式创建文本块

如何解决《如何使用WPF中的SegoeMDL2Assets字体以编程方式创建文本块》经验,为你挑选了1个好方法。

我想这应该很容易,但是我得到了一堆方盒,而不是我需要的图标.

最初我在xaml中编写了一个菜单:

code omitted


    
    


code omitted

我现在必须动态创建此菜单,所以我有以下内容:

ListBoxItem menuHome = new ListBoxItem();
StackPanel menuHomeStackPanel = new StackPanel() { Orientation = Orientation.Horizontal };
menuHomeStackPanel.Children.Add(new TextBlock() { FontFamily = new FontFamily("Segoe MDL2 Assets"), FontSize = 16, VerticalAlignment = VerticalAlignment.Center, Text = "" });
menuHomeStackPanel.Children.Add(new TextBlock() { FontSize = 16, VerticalAlignment = VerticalAlignment.Center, Text = "Home", Padding = new Thickness(15, 0, 0, 0) });
menuHome.Content = menuHomeStackPanel;
menuHome.Name = "menuHome";
IconsListBox.Items.Add(menuHome);

除了Segoe MDL2 Assets字体之外,这几乎与我相同,可以在下面的屏幕截图中看到:

截图

任何想法 - 可能很简单......?



1> 小智..:

是一个XML字符实体.在您的原始XAML中,它由XML解析器自然解析,XML解析器通过XML解析规则将子字符串转换为单个16位Unicode字符.当框架创建TextBlock控件时,很久以来就转换为单个Unicode字符.

但是现在你已经有了这个C#代码.该字符串由C#解析器解析,其规则称为完全普通的8个 Unicode字符串.

Text = ""

你传递了八个字符的东西,只有XML解析器可以理解 - 但是不再涉及XML解析器.控件在您选择的字体中显示这八个字符,并且字体没有字形,因此它显示八个空框.

C#具有在字符串文字中指定Unicode字符的等效表示法.而不是&#x前缀和';' postfix,你只需用四位十六进制字符代码作为前缀\x.相同的十六进制代码,但是告诉这个特定解析器的一种不同方式(从技术上讲,词法分析器 - 但是现在不要去那里)这四个十六进制字符意味着特殊的东西.

所以试试这个:

Text = "\xE10F" 

但这些中的任何一个都会起作用; C#有更多的方法来表示字符串文字之外的整数:

Text = Char.ConvertFromUtf32(0xE10F);

//  Same value, in base 10
Text = Char.ConvertFromUtf32(57615);


像魅力一样工作-谢谢。\在做什么?-说“这是一个字符,而不是字符串文字”?
@Rick`\x`是C#字符串文字中使用的前缀,表示接下来的四个字符是十六进制字符代码.它完全等同于XML`表示法.
推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有