SEGOE UI符号 - 编程性



编辑:

下面是我的XML的格式。它包含我的Iconsheet的数据。我只为样本放置一个图标十六进制值。

<Item>
  <ItemInfo>
    <Value>uE101</Value>
    <Name>1</Name>
  </ItemInfo>
</Item>

这是我的代码中的片段

private void OnLoaded(object sender, RoutedEventArgs e)
    {
        data = (from query in XElement.Load("Data.xml").Descendants("ItemInfo")
                select new ItemInfo
                {
                    value = (int)(query.Element("Value").Value),
                    name = (string)query.Element("Name")
                }).ToList();
        int itemcount = data.length;
        while (itemcount-- > 0)
        {
            TextBlock t = new TextBlock()
            {
                Width = 75,
                Height = 75,
                Text = @"" + data[itemcount].value,
                FontFamily = new FontFamily("Segoe UI Symbol")
            };
            wrapPanel.Children.Add(t);
        }
    }

在上述数据[ItemCount]中。值包含数据为" UE101"。这不起作用。

下面的代码工作。

Text = "uE101"

任何帮助将不胜感激。

更新:

HAR07 mishan 评论的帮助下,我现在对如何处理C#中的十六进制代码有一个清晰的剪切想法。谢谢您的帮助。但是我更新了我正在尝试的问题,这就是导致我问题的原因。

在这种情况下,您不能将后斜线与下一个字符分开。此代码:

@"" + "uE101"

等于:

"\uE101"

将输出此字符串而不是特殊字符:

uE101

他们需要写为单字符串表达式:

"uE101"

更新:

您可以通过在XML(<Value>E101</Value>)中仅存储字符的十六进制部分来使用 @Mishan的第二个解决方案,然后将其解析为int->> contry int to char->将char->转换回字符串(以下是以下示例澄清我的意思):

.....
TextBlock t = new TextBlock()
            {
                Width = 75,
                Height = 75,
                Text = ((char)int.Parse(data[itemcount].value, NumberStyles.HexNumber)).ToString(),
                FontFamily = new FontFamily("Segoe UI Symbol")
            };
.....

或将确切的字符写入XML并指定XML编码为支持您的特殊字符的格式。您没有显示代码来创建该XML,因此我无能为力地处理与您的相近的确切样本。但是您可以通过关键字搜索此主题" c#编写XML文档,并使用特定的编码"来找到许多示例。

好吧, har07 在他的回复中回答了您的问题,所以我将添加一些可能的解决方案。

1.存储整个字符

  • 将后斜线添加到数据中 - 然后它将起作用

  • 创建数据时,请立即将后斜切添加到它,以便已经完成

2。将字符作为(十六进制)数字存储

或立即将它们存储为字符,这将是最好的选择

  • 当您出于某种原因需要组装它们时,您只需从数字转换为字符,瞧。

示例:

while (itemcount-- > 0)
    {
        //can be achieved if data[].value is integer
        //for testing purposes 
        //I used integer with value 0xE101
        //int a = 0xe101;
        TextBlock t = new TextBlock()
        {
            Width = 75,
            Height = 75,
            Text = ((char)data[itemcount].value).ToString(),
            //Text = ((char)a).Tostring(),
            FontFamily = new FontFamily("Segoe UI Symbol")
        };
        wrapPanel.Children.Add(t);
    }

我答案的更新

  1. 最简单的解决方案是,如果您可以将整个代码保存在XML中。,我的意思是,如果您可以在uE101

    之前添加后斜击(
    <Item>
      <ItemInfo>
       <Value>uE101</Value> //see the added "" character?
       <Name>1</Name>
      </ItemInfo>
    </Item>
    

    和C#代码:

    data = (from query in XElement.Load("Data.xml").Descendants("ItemInfo")
    select new ItemInfo
    {
        value = query.Element("Value").Value, //provided value is of string type
        name = query.Element("Name").Value
    }).ToList();
    
  2. 仅存储十六进制值,在前面没有" u" 喜欢 E101,而不是 uE101,然后将它们转换为ints ....

    //the conversion from STRING CONTAINING HEXADECIMAL CHARACTERS to INTEGER
    //can be done by standard methods included in basic interger...
    //YOUR'S doesn't work because you didn't remove the `u` in front of the HEX VALUE
    //in string - and i'm  also not sure about the implicit conversion between
    //hexadecimal string and integer....
    //so, the improved version of your code using the stuff you have now
    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        //this should work for values stored as integer
        data = (from query in XElement.Load("Data.xml").Descendants("ItemInfo")
            select new ItemInfo
            {
                value = int.Parse(query.Element("Value").Value.ToString().Substring(1),NumberStyles.HexNumber),
                name = query.Element("Name").Value
            }).ToList();
        int itemcount = data.length;
        while (itemcount-- > 0)
        {
            TextBlock t = new TextBlock()
            {
                Width = 75,
                Height = 75,
                Text = @"" + data[itemcount].value,
                FontFamily = new FontFamily("Segoe UI Symbol")
            };
            wrapPanel.Children.Add(t);
        }
    }
    

结论

IMHO我能想到的最好的解决方案是我的头顶是将XML与后斜线一起存储在值中,并且在阅读时,拥有 ItemInfo 类,名称

最新更新