以编程方式设置Image.Source属性:我得到一个空图像

时间:2014-08-16 02:01:57

标签: c# wpf image

我的项目中有一个文件夹,其中包含一些图像,例如:“Cards / 1-1.png”。

我有一个与XAML链接的Image元素,我正在尝试以编程方式设置它的Source属性:

BitmapImage bitmap = new BitmapImage();
string filename= "Cards/1-1.png";
bitmap.UriSource = new Uri("/Poker;component/" + filename, UriKind.Relative);
cardImage1.Source= bitmap;  // myImage linked with XAML

我尝试填充5张图片,然后检查了文件名,它们是正确的。但是图像仍然是空的(它们位于右侧的StackPanel内):

    <StackPanel Orientation="Horizontal" DockPanel.Dock="Right"
        Background="Green">
        <Image Width="80" Height="100" Margin="10" x:Name="cardImage1"/>
        <Image Width="80" Height="100" Margin="10" x:Name="cardImage2"/>
        <Image Width="80" Height="100" Margin="10" x:Name="cardImage3"/>
        <Image Width="80" Height="100" Margin="10" x:Name="cardImage4"/>
        <Image Width="80" Height="100" Margin="10" x:Name="cardImage5"/>
    </StackPanel>

enter image description here

2 个答案:

答案 0 :(得分:1)

我尝试了这段代码,但它没有用,我找到了一种方法来做你真正需要的东西:

cardImage1.Source = new BitmapImage(new Uri("/Poker;component/" + filename, UriKind.Relative));

您将BitmapImage.Source分配给Image.Source,我认为这就是它无法正常工作的原因。

希望它有所帮助。

答案 1 :(得分:1)

BitmapImage实现ISupportInitialize接口,这意味着除非包含在 BeginInit() {{1}中,否则将忽略对象初始化后的任何属性更改}

引自 MSDN

  

BitmapImage实现了ISupportInitialize接口以进行优化   初始化多个属性。财产变更只能发生   对象初始化期间。调用BeginInit来发出信号   初始化已经开始,EndInit表示初始化有   完成。初始化后,将忽略属性更改。

     

使用BitmapImage构造函数创建的BitmapImage对象是   自动初始化和属性更改将被忽略。

因此,更改代码以包装属性初始化,如下所示:

EndInit()

OR

通过在构造函数中传递Uri来初始化初始化时的所有相关属性:

BitmapImage bitmap = new BitmapImage();
string filename= "Cards/1-1.png";
bitmap.BeginInit();
bitmap.UriSource = new Uri("/Poker;component/" + filename, UriKind.Relative);
bitmap.EndInit();
cardImage1.Source= bitmap;  // myImage linked with XAML