我的项目中有一个文件夹,其中包含一些图像,例如:“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>
答案 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