在VS2017中使用IronPython和WPF:
我已将位于我的代码源目录中的图标添加到XAML Window标记中。我还在解决方案资源管理器中包含了项目中的文件。如果我使用完整文件C:驱动器文件路径,它的工作原理。但是,我需要使用相对路径,因为它将在其他计算机上运行。
如果我尝试Icon =" ../ xxx.ico"找不到文件(波浪线,"找不到......)。
如果我尝试Icon =" xxx.ico"编辑时找到文件IS,但在运行时我得到一个异常
例外:无法创建'图标'来自文本' xxx.ico'。
似乎Python解释器找不到它。
我需要做什么才能在运行时找到它?
答案 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
就这样!现在,我们的图标已设置并可以按预期工作。
任务栏:
应用程序图标: