IronPython WPF项目在运行时无法找到ICO文件

时间:2017-10-02 17:37:56

标签: wpf ironpython

在VS2017中使用IronPython和WPF:

我已将位于我的代码源目录中的图标添加到XAML Window标记中。我还在解决方案资源管理器中包含了项目中的文件。如果我使用完整文件C:驱动器文件路径,它的工作原理。但是,我需要使用相对路径,因为它将在其他计算机上运行。

如果我尝试Icon =" ../ xxx.ico"找不到文件(波浪线,"找不到......)。

如果我尝试Icon =" xxx.ico"编辑时找到文件IS,但在运行时我得到一个异常

  

例外:无法创建'图标'来自文本' xxx.ico'。

似乎Python解释器找不到它。

我需要做什么才能在运行时找到它?

1 个答案:

答案 0 :(得分:0)

我自己也遇到了同样的问题,并且找到了解决方案,尽管有点晚了!

确实,IronPython会将字段解释为文本,除非它确定存在有效的uri

我们可以通过代码解决此问题,这里需要对c#进行一些了解,以及如何处理icons

  • 动态设置我们的路径和文件 运行时定位。

  • 创建一个BitmapImage 将文件位置转换为c# Uri

    之后
  • 更新我们的xaml,使我们的window拥有x:Name=""

  • 将我们的window.Icon设置为我们先前定义的BitmapImage


XAML

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xml:lang="en-AU"
    x:Name="window">
</Window>

后面的代码

import os
import clr

clr.AddReference('System')

from System import Uri
from System.Windows.Media.Imaging import BitmapImage

class Application(Window):

    def __init__(self):  

        ## Set our icon file path dynamically based off working directory ##
        icon = os.path.join(os.getcwd(), 'app-logo.ico')

        ## Define BitmapImage from Uri(filepath) ##
        self.icon = BitmapImage(Uri(icon))

        ## Load our wpf component, defined under self.ui to allow easy access ##
        self.ui = wpf.LoadComponent(self, 'application.xaml')

        ## Set our XAML x:Name="window"'s Icon field to our BitmapImage
        self.ui.window.Icon = self.icon

就这样!现在,我们的图标已设置并可以按预期工作。

任务栏:

enter image description here

应用程序图标:

enter image description here