如何从Iron Python中的xaml访问嵌入字体

时间:2012-11-10 10:41:06

标签: wpf ironpython true-type-fonts sharpdevelop

我想将字体添加到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”并使用构建操作资源。但这种方法不起作用。

1 个答案:

答案 0 :(得分:0)

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

首先更改字体的构建操作,以便复制到输出目录 始终。在您的示例中,字体将被复制到bin \ Debug \ Fonts \文件夹。

现在您需要为文本框命名,以便通过代码访问它。在MainWindow.xaml中,将 x:Name 属性添加到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属性。

相关问题