这个问题让我发疯了,我真的不知道发生了什么 - 为什么它不能像我认为的那样工作。
我有一个WPF C#项目。我在我的解决方案中添加了一个名为“ExtFiles”的目录。该目录包含ICO文件,PNG图像和TTF字体。
所有三个文件都将“build action”设置为“resource”,并将“copy to output dir”设置为“Do not copy”。
我通过以下方式在XAML中调用这3个文件:
图标:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="Swiftech_Imperium.MainWindow"
Title="Imp" Height="435" Width="510" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen" Icon="pack://application:,,,/ExtFiles/imp.ico"
图片:
<Image HorizontalAlignment="Left" Width="278" Height="30" Margin="9,401,0,0" VerticalAlignment="Top" Source="pack://application:,,,/ExtFiles/Logo.png"/>
对于字体:
<Label x:Name="LabelTemp1" BorderBrush="#FFFFA421" BorderThickness="1" FontFamily="pack://application:,,,/ExtFiles/#DS-Digital" Height="30"
一切正常,没有错误。图像正在显示,图标也在显示,字体正在工作。
但是,当我发布时,它会生成带有图标的ExtFile目录。这是为什么?我的目标是将所有3个文件嵌入EXE中。我的目标是使用单个EXE文件部署程序,而不是用户的要求。
所有这3个文件只在XAML中调用,而在其他任何地方都没有,我不明白为什么它对于图像和字体工作正常但不适用于图标......
有什么想法吗?
由于 史蒂夫
编辑:我试过这个:Embed multiple icons in WPF EXE(最后一个答案),但它不起作用。
Icon="/Resources/Imp.ico"
Source="/Resources/Logo.png"
FontFamily="/Resources/#DS-Digital"
我收到此错误(仅针对图标,如果我可以将Icon =“..”输出,但图片和字体未应用...
'System.Windows.Baml2006.TypeConverterMarkupExtension' threw an exception.' Line number '5' and line position '9'.
我将3个文件添加为资源(资源,添加文件)并将其构建操作设置为“资源”。
编辑:
好的......我向前走了一小会儿。
我在资源中添加了两个DLL(是的,有两个!)。 将图像/图标/字体移动到单独的文件夹(可能不需要)。
但我仍然遇到同样的错误(解析)。
原来是我的XAML正在调用第二个DLL(我原本忘了添加到资源中)。
现在将两个DLL作为资源,如果我进入引用并将这两个DLL的Copy Local设置为False,我会收到错误。我可以将第一个dll(WPFToolkit.dll)设置为false,但我无法为system.windows.controls.datavisualization.toolkit.dll执行:(
原因是因为XAML正在调用它:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="Imperium.MainWindow"
Title="Imperium" Height="435" Width="510" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen" Icon="pack://application:,,,/ExtFiles/Imp.ico" Closing="Window_Closing" MouseDown="Grid_MouseDown" WindowStyle="None" BorderThickness="1" BorderBrush="Black" Foreground="Black">
我该怎么办?
答案 0 :(得分:0)
你的包URN错误的图标。它应该是:
pack:// application:,,, /(合格的程序集名称,即My.Project.Executable); component / ExtFiles / imp.ico
将文件添加到VS项目文件夹时,应使用Resource
将其设置为Do Not Copy
。
同样适用于图像和字体 - tho&#39;我还会说我没有使用像这样的直接引用来加载字体,我不确定它是这样的。
答案 1 :(得分:0)
试试这个: 使用资源将是实现相同任务的不同方法。我想为您提供阅读某些msdn文章的链接。