Cómo incluir una fuente externa en la aplicación WPF sin instalarlo

Cómo incluir una fuente externa en la aplicación WPF sin instalarlo

Probé este código

System.Drawing.Text.PrivateFontCollection privateFonts = new System.Drawing.Text.PrivateFontCollection(); privateFonts.AddFontFile("C:\\Documents and Settings\\somefont.ttf"); System.Drawing.Font font = new Font(privateFonts.Families[0], 12); this.label1.Font = font; 

Funciona correctamente en la aplicación Windows Form pero no en WPF.

Yo uso dicho código XAML:

  

#HATTEN – referencia a hatten.tft en Recursos.

Usando el estilo:

   

Estas son dos formas de hacer esto. Una forma es empaquetar las fonts dentro de la aplicación. La otra forma es tener las fonts en la carpeta de salida por separado. La diferencia es principalmente el URI que necesita para cargar los archivos.

Paquete con la aplicación

  1. Agregue una carpeta /Fonts a su solución.
  2. Agregue los archivos True Type Fonts ( *.ttf ) a esa carpeta
  3. Incluir los archivos en el proyecto
  4. Seleccione las fonts y agréguelas a la solución
  5. Establecer BuildAction: Resource y Copy To Output Directory: Do not copy . Su archivo .csproj ahora debería tener una sección como esta:

             
  6. En App.xaml agrega Resources. Debería verse como en el siguiente ejemplo de código. Tenga en cuenta que el URI no contiene el nombre del archivo al empacar con la aplicación.

       pack://application:,,,/Fonts/#Noto Sans pack://application:,,,/Fonts/#Noto Sans Symbols   
  7. Aplica tus fonts de esta manera:

      
  8. También puede establecer la fuente de forma imperativa:

     myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans"); 

Copiar al directorio de salida

  1. Agregue una carpeta /Fonts a su solución.
  2. Agregue los archivos True Type Fonts ( *.ttf ) a esa orden
  3. Incluir los archivos en el proyecto
  4. Seleccione las fonts y agréguelas a la solución
  5. Establezca BuildAction: Content y Copy To Output Directory: Copy if newer . Su archivo .csproj ahora debería tener una sección como esta:

        PreserveNewest   PreserveNewest   PreserveNewest   PreserveNewest   PreserveNewest   
  6. En App.xaml agrega Resources. Debería verse como en el siguiente ejemplo de código. Tenga en cuenta que el URI no contiene el nombre del archivo al empacar con la aplicación.

       ./Fonts/NotoSans-Regular.tts#Noto Sans ./Fonts/NotoSans-Italic.tts#Noto Sans ./Fonts/NotoSans-Bold.tts#Noto Sans ./Fonts/NotoSans-BoldItalic.tts#Noto Sans ./Fonts/NotoSans-Regular.tts#Noto Sans Symbols   
  7. Aplica tus fonts de esta manera:

      

Referencias

  • MSDN: Fuentes de empaquetado con aplicaciones

La mejor respuesta a esta pregunta que encontré aquí

http://geekswithblogs.net/Martinez/archive/2010/01/29/custom-font-in-wpf-application.aspx

SOLUCIÓN Se trata de utilizar cadenas aún más perversas que antes, pero funciona como se esperaba:

  

Dónde está Folder1 es una carpeta de su proyecto donde guarda un archivo TTF. Tres notas al final:

  1. ‘Katana’ es el nombre de la fuente, no el nombre del archivo. Esta es una diferencia significativa. Para obtener el nombre de la fuente, simplemente haga clic en el archivo dos veces.

  2. Recuerde colocar el signo de almohadilla ‘#’ delante del nombre de la fuente. No funcionará de otra manera.

  3. La fuente personalizada también se puede agregar al proyecto con ‘Build Action’ establecido en ‘Contenido’. Sin embargo, este no es un enfoque recomendado y, en aras de la simplicidad, ignoré esta posibilidad.

Algunos enlaces extra

https://msdn.microsoft.com/en-us/library/ms753303(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/cc296385.aspx

No encontré ninguna respuesta exactamente para eso. Pero encontré una solución que no vi en Internet.

Seguí una recomendación de hacer una carpeta y marcar todos los archivos dentro como Recursos. Pero tenía que enumerarlos, y ese era mi problema principal, porque necesito cargar todo en mi pantalla sin grabar el nombre en alguna parte. Solo quiero soltar otra fuente a esa carpeta y listarla.

Encontré esto como una solución para listar todos los archivos dentro de mi carpeta resources / fonts

 Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#")) 

Espero que lo ayude a organizar sus fonts.

Yo uso xaml para esto

  

Incluí el archivo de fuente dentro de la carpeta “Fuentes”

Tengo una carpeta de fonts dentro de una carpeta de activos en mi proyecto. En tiempo de comstackción, copiará esas fonts en la carpeta como contenido. Entonces simplemente puedo usar el siguiente XAML para usar la fuente FontAwesome para tener un ícono en mi botón.

  

Esto es lo que funcionó para mí:

(1) Agregar directorio a proyecto: fuente

(2) Mueva el archivo de fuente ttf al directorio de fonts

(3) Agregue el archivo de fuente ttf para proyectar

(4) Establezca la propiedad “Generar” del archivo de fuente tff en “Recurso” (Nota: utilicé “Recurso” en lugar de “Recurso incrustado” en la selección del cuadro combinado.)

(5) Abra la ventana donde está usando la fuente y realice los siguientes cambios:

    pack://application:,,,/font/#NameOfFont       This is a test    ...  

(6) Si desea cambiar la fuente del código. Hacer esto:

 public partial class Window1 : Window { // Use font as C# Code public void UpdateText1() { text1.Text = "Hi There"; FontFamily ff = this.Resources["YourFontNickName"] as FontFamily; if (ff == null) { Messagebox.Show("Wrong Font Name", "ERROR"); return; } text1.FontFamily = ff; text1.FontSize = 30; } ... } 

Estaba tratando de hacer que esto funcione también con una fuente diferente, solo funcionó para mí en este formato con ./Fonts

pack://application:,,,./Fonts/#Noto Sans