Pack URI and path not resolving image in WPF

18,708

Solution 1

I actually got this to work, but had to set my source to "/ProjectName;component/images/view.png" Because I have the ProjectName as a referenced assembly this is then the same as the Path: portion at the msdn page that I referenced in the question.

Solution 2

Set the Build Action for 'view.png' to Resource instead of Content and this problem should go away. I was able to reproduce your problem this way and it works correctly when set as a Resource.

Share:
18,708
Anthony Potts
Author by

Anthony Potts

I have been a programmer for a several years, but have a lot to learn, as we all should.

Updated on June 12, 2022

Comments

  • Anthony Potts
    Anthony Potts almost 2 years

    I have the following directory structure

    Project
    \Images
     +view.png
    control.xaml
    

    and in the control I have a button defined by the following 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>
    

    However, neither this pack URI method nor the "/images/view.png" is working. As I understand it, this is the same issue this question raises. However, I get the same error. The confusing thing is that in designer in Visual Studio 2008, the image renders correctly, but on the call to the InitializeComponent() call, I get:

    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.

    I thought that maybe there was a namespace that I had to declare but according to the msdn site I believe I don't have to do anything like that.