WPF中的Pack URI和路径无法解析图像

4

我有以下的目录结构

Project
\Images
 +view.png
control.xaml

在控件中,我定义了一个按钮,其 XAML 如下:

<Button Click="Search"
        Grid.Column="1"
        Margin="0,5,5, 0"
        HorizontalAlignment="Right">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Image Source="pack://application:,,,/images/view.png"
                   Width="16"
                   Height="16"
                   ToolTip="Search"
                   Cursor="Hand"
                   Opacity="0.8" />
        </ControlTemplate>
    </Button.Template>
</Button>

然而,无论是使用pack URI方法还是"/images/view.png"路径都不起作用。据我所知,这与此问题相同。然而,我收到了相同的错误信息。令人困惑的是,在Visual Studio 2008的设计器中,图像可以正确呈现,但在调用InitializeComponent()时,我会得到以下错误信息:
“Cannot convert string 'pack://application:,,,/images/view.png' in attribute 'Source' to object of type 'System.Windows.Media.ImageSource'. Cannot locate resource 'images/view.png'. Error at object 'System.Windows.Controls.ControlTemplate' in markup file 'RecapSpecEditControl;component/modaltreadgroupdatadialog.xaml' Line 61 Position 40.”
我认为也许有一个命名空间需要声明,但根据msdn网站的说法,我认为我不需要做任何事情。
3个回答

9

我最终成功了,但是不得不将我的源路径设置为"/ProjectName;component/images/view.png"。因为我将ProjectName作为引用程序集,所以这与我在问题中引用的msdn页面上的路径部分相同。


6

将“view.png”的构建操作设置为资源而不是内容,这个问题就会消失。我通过这种方式能够复制您的问题,并且当将其设置为资源时,它可以正常工作。


1
我觉得你可能有所发现,但是我的图像构建操作已经设置为资源。那么输出目录中的复制设置如何?你把它设置成了什么? - Anthony Potts
不要复制。有趣的是,我以为那就是问题所在,因为它在设计师中显示,并且当我将其构建为内容时,在运行时给了我完全相同的错误。 - Ben Collier
1
你的回答非常有道理,我相信我会发现我的构建操作是错误的。 - Anthony Potts
找到了解决方案,但是你的答案在特定情况下确实值得注意,正如你所展示的。谢谢帮助。 - Anthony Potts
+1 指引我正确的方向。和 OP 类似的问题,但我的“生成操作”设置为“嵌入式资源”,改为“资源”后问题得到解决。 - OttPrime

-3

Xaml.VB

从应用程序文件夹中调用图像并设计页面

Private Sub LoadImages()
        Dim strUri As String
        strUri = AppDomain.CurrentDomain.BaseDirectory() & "\NavigationImages\settingsicon.png"
        Image2.Source = New BitmapImage(New Uri(strUri))
    End Sub

Xaml.VB 页面加载

调用 LoadImages()

Xaml 设计页面

Image Name="Image2"Height="32" HorizontalAlignment="Left" 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接