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”并使用构建操作资源。但是这种方法行不通。

4

1 回答 1

1

您需要使用代码将字体添加到文本框中。wpf.LoadComponent() 方法从磁盘加载 .xaml 文件并创建 WPF 窗口,但不会在任何嵌入式资源中查找包括字体在内的任何内容。据我所知,最简单的方法是从磁盘加载字体。

首先更改字体的构建操作,使Copy to output 目录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 回答