2017-02-15 62 views
0

我們需要爲特定的外語使用特定的字體。基於這個問題的答案,似乎CompositeFont將是處理這個問題的最好方法。如何在應用程序中使用自定義CompositeFont?

Best way to localize fonts in wpf

但我努力讓這該死的東西的工作。

我如下

<FontFamily xmlns="http://schemas.microsoft.com/winfx/2006/xaml/composite-font" 
     xmlns:System="clr-namespace:System;assembly=mscorlib" 
     Baseline="0.9" 
     LineSpacing="1.2"> 

<!-- Name mapping --> 
<FontFamily.FamilyNames> 
    <System:String Key="en-US">MyFont</System:String> 
</FontFamily.FamilyNames> 

<!-- Faces to report in font chooser UI --> 
<FontFamily.FamilyTypefaces> 
    <FamilyTypeface Weight="Normal" 
        Stretch="Normal" 
        Style="Normal" 
        UnderlinePosition="-0.1" 
        UnderlineThickness="0.05" 
        StrikethroughPosition="0.3" 
        StrikethroughThickness="0.05" 
        CapsHeight="0.5" 
        XHeight="0.3" /> 

    <FamilyTypeface Weight="Bold" 
        Stretch="Normal" 
        Style="Normal" 
        UnderlinePosition="-0.1" 
        UnderlineThickness="0.05" 
        StrikethroughPosition="0.3" 
        StrikethroughThickness="0.05" 
        CapsHeight="0.5" 
        XHeight="0.3" /> 
</FontFamily.FamilyTypefaces> 
<FontFamily.FamilyMaps> 

    <FontFamilyMap Unicode="0000-052F, 1D00-1FFF, FB00-FB0F" 
        Target="Comic Sans MS" 
        Scale="1.0" /> 

</FontFamily.FamilyMaps> 

</FontFamily> 

構建屬性已被設置爲資源,並且它被保存在.CompositeFont名創建Font.CompositeFont文件。

但是,將我的任何字體的FontFamily設置爲「/#MyFont」似乎沒有設置字體。我確定我在某個地方錯過了一個步驟,但如果我能找到有關該步驟的任何資源,我會被詛咒。 (我會繼續找然而)

在樣式設置字體如下

<Style x:Key="defaultLabelFont" 
     TargetType="Label"> 
    <Setter Property="FontFamily" 
      Value="#MyFont" /> 
    <Setter Property="FontSize" 
      Value="12" /> 
    <Setter Property="VerticalAlignment" 
      Value="Bottom" /> 
    <Setter Property="HorizontalAlignment" 
      Value="Center" /> 
</Style> 

如果任何人都可以在正確的方向指向我什麼我已經錯過了它會不勝感激。

+0

開始,讓你只能在您的應用程序這種方式.TTF的感覺,而不是複合字體。 – user3265613

回答

0

我建議處理InputLanguageChanged事件

System.Windows.Input.InputLanguageManager.Current.InputLanguageChanged += 
     Current_InputLanguageChanged; 

,並決定有關字體家庭或大小或等

private void Current_InputLanguageChanged(object sender, InputLanguageEventArgs e) 
    { 
     if (e.NewLanguage.EnglishName == "...") 
      Application.Current.MainWindow.FontFamily = new FontFamily("Times New Roman"); 
     else 
     { 
      // ... 
     } 
    } 
+0

對不起,遲到的答覆,並感謝您的建議。我已經考慮過這樣的事情,但我們使用了許多不同的字體大小/顏色,這看起來並不經濟。我們並不擔心輸入語言,只是翻譯的輸出。 CompositeFont真的是一個完美的答案,只是希望有關於如何正確使用它的文檔。 – user3265613

相關問題