Я пытаюсь получить все символы Segoe UI Symbol Font.
Я получил их, преобразовал в char, преобразовал в шестнадцатеричное значение и добавил в список как элементы.
Таким образом, кто-то другой может использовать свои шестнадцатеричные значения для проектов XAML в качестве значка.
Но проблема в коде: я всегда получаю OverFlowException
в функции Convert.ToChar
.
Код работает правильно, но когда переменная индекса больше 65535, что является максимальным значением char, я получаю исключение переполнения.
Но если вы запустите код, как вы увидите, в семействе шрифтов Segoe UI Symbol больше символов, чем 65535.
Может быть, мой метод неверен, вы можете посоветовать мне другой метод.
Файл MainWindow.xaml:
<Grid Loaded="Grid_Loaded">
<ListView x:Name="listview">
<ListView.View>
<GridView>
<GridViewColumn Header="HexValue" />
</GridView>
</ListView.View>
</ListView>
</Grid>
Файл MainWindow.xaml.vb
Class MainWindow
Public glyph As GlyphTypeface
Dim characterMap As IDictionary(Of Integer, UShort)
Private Sub Grid_Loaded(sender As Object, e As RoutedEventArgs)
SymbolleriGetir()
End Sub
Public Sub SymbolleriGetir()
Dim segoeUiSymbol As FontFamily
For Each font As FontFamily In Fonts.SystemFontFamilies
Dim fontName As String
fontName = font.Source
If fontName = "Segoe UI Symbol" Then
segoeUiSymbol = font
End If
Next
For Each typeFace As Typeface In segoeUiSymbol.GetTypefaces
typeFace.TryGetGlyphTypeface(glyph)
If glyph IsNot Nothing Then
characterMap = glyph.CharacterToGlyphMap
Else
Continue For
End If
Next
For i As Integer = 0 To characterMap.Keys.Count
Dim index As Integer = characterMap.Keys.ElementAt(i)
Dim c As Char = Nothing
c = Convert.ToChar(index)
Dim charText As String = c.ToString()
listview.Items.Add(String.Format("&#x{0:x2};", System.Convert.ToUInt32(c)))
Next
End Sub
End Class
OverflowException
будет повышен, если значение меньшеChar.MinValue
или большеChar.MaxValue
. - person NoviceProgrammer   schedule 14.02.2014