2011-06-29 63 views
2

這真的很奇怪。在Blend 4中,當我在設計器中看到應用程序時,自定義字體起作用,但是當我運行它時,字體消失了,它又回到了arial或其他東西。這是我的XAML:WPF自定義字體問題

<TextBlock Text="Text G" FontFamily="/ProjectName;component/Fonts/#Futura Lt BT" FontSize="48" Background="#FFC44747" /> 

的字體是一個叫「字體」文件夾,在其中我想要的字體是一種叫做「控件」文件夾中的控制英寸我知道它必須是「Fonts」文件夾與「Controls」文件夾的相對位置有問題,但我已經嘗試了很多東西,但它不起作用。

另外,我放置的XAML標記是Blend在選擇自定義字體時創建的。字體被複製爲資源(我已經檢查過csprof文件,它在那裏)。

任何想法?這一直在踢我的屁股現在幾個小時。

謝謝。

+0

「有一天我編譯了(沒有改變)」 - 你的SCC中有什麼比較說的? –

+0

@Mitch小麥完全沒有改變,顯然這是WPF中的一個錯誤。 – Carlo

+0

我不明白downvotes,因爲它是一個真實(而且非常煩人)的問題,有時候stackoverflow社區可能會非常討厭。 – Carlo

回答

0

無處不在互聯網和書籍中,它說當你添加一個字體時,你應該把Build Action設置爲「Resource」(example here)。它「工作了一段時間。無論如何,要解決我的問題,我必須將其從「資源」更改爲「內容」。

+0

將字體設置爲「內容」(假定使用「始終複製」)將該字體放置在系統中,用戶可以在其中操作該字體。不太可能,已經授予,但將其作爲資源是一種更好的慣例。 –

1

雖然我明白,這是爲時已晚,以幫助這個問題筆者,我要離開這個幫助這個問題的未來觀衆。

在這個答案的信息來自Packaging Fonts with Applications頁面上MSDN:

添加字體作爲內容項

您可以添加字體到您的應用程序是獨立於項目的內容項目應用程序的彙編文件。這意味着內容項目不會作爲資源嵌入到程序集中。以下項目文件示例顯示如何定義內容項目。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- Other project build settings ... --> 

    <ItemGroup> 
    <Content Include="Peric.ttf" /> 
    <Content Include="Pericl.ttf" /> 
    </ItemGroup> 
</Project> 

爲了確保應用程序可以在運行時使用的字體,字體必須在應用程序的部署目錄訪問。應用程序項目文件中的元素允許您在構建過程中自動將字體複製到應用程序部署目錄。以下項目文件示例顯示如何將字體複製到部署目錄。

<ItemGroup> 
    <Content Include="Peric.ttf"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    <Content Include="Pericl.ttf"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

添加字體作爲資源項

您可以字體添加到您的應用程序嵌入應用程序的組件文件中項目資源的項目。爲資源使用單獨的子目錄有助於組織應用程序的項目文件。以下項目文件示例顯示如何在單獨的子目錄中將字體定義爲資源項目。

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- Other project build settings ... --> 

    <ItemGroup> 
    <Resource Include="resources\Peric.ttf" /> 
    <Resource Include="resources\Pericl.ttf" /> 
    </ItemGroup> 
</Project> 

當您添加字體作爲資源到應用程序,請確保您設置的元素,而不是在你的應用程序的項目文件中的元素。構建操作的元素不受支持。

以下標記示例顯示如何引用應用程序的字體資源。

<TextBlock FontFamily="./resources/#Pericles Light"> 
    Aegean Sea 
</TextBlock> 

請按照從碼和其他有用的信息引用字體資源上面的鏈接瞭解詳情。