Как я могу использовать значки FontAwesome в NavigationPages UWP Xamarin.Forms?

Я использую FontAwesome в ContentPage, без проблем в Android и UWP. (Android использует класс отрисовки меток). Однако, когда я заменяю NavigationPage на ContnetPage, значки шрифтов UWP исчезают и показывают квадрат! Android отлично работает с NavigationPage. Нужен ли UWP рендеринг, как Android?

public class FontAwesomeIcon : Label
    {
        public const string Typeface = "FontAwesome";
        public FontAwesomeIcon(string fontAwesomeIcon = null)
        {
            switch (Device.RuntimePlatform)
            {
                case Device.Windows :
                {
                    FontFamily= "Assets/Fonts/FontAwesome.ttf#FontAwesome";
                    break;
                }
                case Device.Android :
                {
                    FontFamily = Typeface;
                    break;
                }
                case Device.iOS:
                {
                    FontFamily = Typeface;
                    break;
                }
            }
            Text = fontAwesomeIcon;
            VerticalOptions = LayoutOptions.Center;
        }

        /// <summary>
        /// Get more icons from http://fortawesome.github.io/Font-Awesome/cheatsheet/
        /// Tip: Just copy and past the icon picture here to get the icon
        /// </summary>
        public static class Icon
        {
            public static string AngleRight = "\uf105";
            public static string User = "\uf007";
            public static string Lock = "\uf023";
        }
    }

Обновление:

Ответ: мы должны использовать это FontFamily=@"/Assets/Fonts/FontAwesome.ttf#FontAwesome"


person paradise_human    schedule 18.04.2017    source источник


Ответы (1)


Однако, когда я заменяю NavigationPage на ContnetPage, значки шрифтов UWP исчезают и показывают квадрат! Android отлично работает с NavigationPage. Нужен ли UWP рендеринг, как Android?

У вас есть два способа использовать собственный шрифт в вашем клиентском проекте uwp.

Создание настраиваемого средства визуализации для класса FontAwesomeIcon. А затем установите FontFamily для собственного управления. Пожалуйста, укажите следующий код. Обратите внимание, что вам нужно проверить путь к FontFamily.

[assembly: ExportRenderer(typeof(CustomLabel), typeof(CustomLabelRenderer))]

namespace FontAweSomeTest.UWP
{
    public class CustomLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            var label = Control;
            string font = "Assets/Fonts/fontawesom-webfont.ttf#FontAwesome";
            label.FontFamily = new Windows.UI.Xaml.Media.FontFamily(font);
        }
    }
}

Другой способ - это то, что вы упомянули в своем посте. Я изменил ваш код. Пожалуйста, проверьте.

public class FontAwesomeIcon : Label
    {
        public const string Typeface = "FontAwesome";

        public FontAwesomeIcon(string fontAwesomeIcon = null)
        {
            switch (Device.OS)
            {
                case TargetPlatform.Windows:
                    {
                        FontFamily = "Assets/Fonts/fontawesome-webfont.ttf#FontAwesome";
                        break;
                    }
                case TargetPlatform.Android:
                    {
                        FontFamily = Typeface;
                        break;
                    }
                case TargetPlatform.iOS:
                    {
                        FontFamily = Typeface;
                        break;
                    }
            }
            Text = fontAwesomeIcon;
            VerticalOptions = LayoutOptions.Center;
            HorizontalOptions = LayoutOptions.Center;
        }

        /// <summary>
        /// Get more icons from http://fortawesome.github.io/Font-Awesome/cheatsheet/
        /// Tip: Just copy and past the icon picture here to get the icon
        /// </summary>
        public static class Icon
        {
            public static string AngleRight = "\uf105";
            public static string User = "\uf007";
            public static string Lock = "\uf023";
        }
    }

Я заменяю NavigationPage на ContnetPage. И это работает очень хорошо.

person Nico Zhu - MSFT    schedule 20.04.2017
comment
Оба они не работают на NavigationPage. Я использую FontAwesome.ttf, потому что мой файл шрифта - FontAwesome.ttf в папке Assets / Fonts ... - person paradise_human; 20.04.2017
comment
Я нашел свой ответ. В любом случае, спасибо. - person paradise_human; 20.04.2017
comment
Не могли бы вы поделиться со мной решением? Чтобы другие пользователи, которые столкнулись с этой проблемой, могли иметь ссылку. - person Nico Zhu - MSFT; 21.04.2017
comment
Мне интересно, в чем разница между строковым типом @" " и " " ? - person Nico Zhu - MSFT; 21.04.2017
comment
Да, я тоже. Наверное, это ошибка. - person paradise_human; 21.04.2017