2017-02-08 4 views
0

Я новичок в WPF Взаимодействие в VB.net Window Forms.WPF UserControl vb.net не отображает собственное семейство шрифтов

Я создаю приложение Windows Form, где я пытаюсь добавить пользовательские элементы управления с помощью ElementHost, который использует собственное семейство шрифтов.

Я создал пользовательскую кнопку с меткой внутри нее, где я применил пользовательский шрифт «Raleway» из Google Fonts, который я загрузил в «Ресурсы».

<UserControl x:Class="ButtonDark" 
     xmlns="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" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:prjButtonTestFont" 
     mc:Ignorable="d" 
     d:DesignHeight="50" d:DesignWidth="150"> 

<Button Content="Button" BorderBrush="{x:Null}" Foreground="{x:Null}" > 
    <Button.Template> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Border x:Name="Border" Background="#ff332d2f" CornerRadius="4" BorderBrush="#ff4e4749" BorderThickness="4"> 
       <Label x:Name="Labelx" Content="Click" FontFamily="/prjButtonTestFont;component/Resources/#Raleway Thin" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#ff4e4749" FontSize="24" /> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsMouseOver" Value="true"> 
        <Setter TargetName="Border" Property="BorderBrush" Value="green"/> 
        <Setter TargetName="Labelx" Property="Foreground" Value="green"/> 
       </Trigger> 
       <Trigger Property="IsPressed" Value="true"> 
        <Setter TargetName="Border" Property="BorderBrush" Value="white"/> 
        <Setter TargetName="Labelx" Property="Foreground" Value="white"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

Изображение XAML дизайн предварительного просмотра показывает шрифт corretly enter image description here

Изображение формы Windows с помощью кнопки UserControl показывая неправильный шрифт enter image description here

профессионал blem заключается в том, что шрифт не будет отображаться при запуске приложения, но он будет корректно отображаться в окне предварительного просмотра дизайна xaml.

Я пробовал все следующие пути к шрифту, которые показывают правильный шрифт в окне предварительного просмотра дизайна xaml, но не при запуске приложения.

FontFamily = "./# Raleway Тонкий"

FontFamily = "/ prjButtonTestFont; компонент/Ресурсы/# Raleway Тонкий"

FontFamily = "../ Ресурсы/# Raleway Тонкий"

FontFamily = "../# Raleway Тонкий"

FontFamily = "Raleway-Thin.ttf/# Raleway Тонкий"

FontFamily = "../ Ресурсы/Raleway-Thin.ttf/# Raleway Тонкий"

FontFamily = "/ prjButtonTestFont; компонент/Ресурсы/Raleway-Thin.tff/# Raleway Тонкий"

FontFamily = "/ Ресурсы/Raleway-Thin.ttf # Raleway Тонкий"

FontFamily =» Raleway-Thin.ttf # Raleway Тонкий»

FontFamily = "Raleway-Thin.TTF # Raleway Тонкий"

FontFamily = "/ Ресурсы/Raleway-Thin.TTF # Raleway Тонкий"

Я также пробовал применить FontFamily к тем же результатам!

Я ищу любое решение, программно ли оно в коде vb или через xaml. Мне просто нужно, чтобы этот шрифт отображался после запуска приложения.

ответ

0

Способ отображения шрифтов - это ссылка на абсолютный путь шрифта. Всякий раз, когда вы используете ресурсы, расположенные в библиотеки (по сравнению с приложения), вы почти всегда хотите абсолютного пути:

FontFamily="pack://application:,,,/YourAssemblyName;component/Fonts/#Actual Font Name"

Edit: Стоит отметить, что ни один из образцов вы обеспечили отражение действительного (абсолютного) пути. /prjButtonTestFont;component/Resources/#Raleway Thin подходит довольно близко, но не совсем корректно. Кроме того, я бы дважды проверял, что имя шрифта действительно. Для этого просто откройте фактический файл шрифта и убедитесь, что имя в самом верху документа совпадает с вашим проектом.

+0

Абсолютным путем вы подразумеваете путь к компьютеру «C: /../ Resources/Fonts/# Font Name». Мне понадобится шрифт для работы на многих компьютерах, а не только тот, с которым я сейчас работаю. – C9C

+0

Нет, вы бы использовали абсолютный путь, который я вложил в свой ответ, но заменим 'YourAssemblyName' на имя сборки и« Фактическое имя шрифта »на имя шрифта. Все остальное должно быть одинаковым. –

0

Этот вопрос также ответил на мой вопрос Reference custom view in other project with custom font

Проблема «Создайте действие» не был установлен в «Ресурс».Для этого выберите шрифт в папке «Ресурсы», а в окне «Свойства» установите «Построить действие» в «Ресурс».

Теперь шрифт отображается, когда программа запущена.