3

WPF Iron Python アプリケーションにフォントをリソースとして追加したいと考えています。xaml ファイルでは、このフォントを xml の Fontfamily 属性で使用したいと考えています。

MainWindow.xaml:
...
<Grid>
  <TextBox Text="ABC" FontFamily="./Fonts/#Foo"/>
</Grid>

Python コードでは、ウィンドウは MainWindow c'tor にロードされます。

MainWindow.py:

class MainWindow (Window):
   def __init__(self):
      wpf.LoadComponent(self, 'MainWindow.xaml')

プロジェクトでは、フォントを「Fonts」フォルダーに追加し、ビルド アクション Resource を使用します。しかし、このアプローチは機能しません。

4

1 に答える 1

1

コードを使用してテキスト ボックスにフォントを追加する必要があります。wpf.LoadComponent() メソッドは、ディスクから .xaml ファイルを読み込み、WPF ウィンドウを作成しますが、フォントを含む埋め込みリソースを調べません。私の知る限り、最も簡単な方法は、ディスクからフォントをロードすることです。

まず、フォントのビルド アクションを変更して、出力ディレクトリへのコピーAlwaysになるようにします。あなたの例では、フォントは bin\Debug\Fonts\ フォルダーにコピーされます。

テキストボックスに名前を付けて、コードからアクセスできるようにする必要があります。MainWindow.xaml でx:Name属性を TextBox に追加します。ここではtextboxという名前を付けました。

<Grid>
    <TextBox x:Name="textbox" Text="ABC"/>
</Grid>

これで、MainWindowクラスにテキスト ボックスのプロパティを追加し、コンストラクターでディスクからフォントを読み込んでテキスト ボックスに適用するコードを記述できます。完全なコードを以下に示します。

import wpf

from System import Uri
from System.IO import Path
from System.Windows import Window
from System.Windows.Media import FontFamily

class MainWindow(Window):
    def __init__(self):
        wpf.LoadComponent(self, 'MainWindow.xaml')
        self.addFont()

    def addFont(self):
        fontDirectory = Path.GetFullPath(".\\Fonts\\")
        uri = Uri(fontDirectory)

        fontFamily = FontFamily(uri, "./#Foo")
        self.textbox.FontFamily = fontFamily

    def get_textbox(self):
        return self._textbox

    def set_textbox(self, value):
        self._textbox = value

    textbox = property(get_textbox, set_textbox)

addFont () メソッドは、フォントがあるディレクトリを指す Uri を作成し、フォントのファミリ名を使用して新しい FontFamily を作成し、最後に TextBox の FontFamily プロパティを更新します

于 2012-11-11T13:15:03.607 に答える