在WPF中嵌入项目图标

时间:2014-07-10 17:36:55

标签: c# wpf

这个问题让我发疯了,我真的不知道发生了什么 - 为什么它不能像我认为的那样工作。

我有一个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">

我该怎么办?

2 个答案:

答案 0 :(得分:0)

你的包URN错误的图标。它应该是:

  

pack:// application:,,, /(合格的程序集名称,即My.Project.Executable); component / ExtFiles / imp.ico

将文件添加到VS项目文件夹时,应使用Resource将其设置为Do Not Copy

同样适用于图像和字体 - tho&#39;我还会说我没有使用像这样的直接引用来加载字体,我不确定它是这样的。

答案 1 :(得分:0)

试试这个: 使用资源将是实现相同任务的不同方法。我想为您提供阅读某些msdn文章的链接。

Adding and Editing Resources (Visual C#)