【发布时间】:2018-02-09 08:20:34
【问题描述】:
对于 WPF 项目,我需要从 Zip 文件中读取 BitmapImage。原始文件格式是 .png 我知道如何直接从文件系统执行此操作,并且工作正常。不幸的是,从 Zip 文件中,图像未显示,但似乎已读取图像。
我创建了一个简单的测试项目:
public partial class MainWindow : Window
{
public BitmapImage RouteImage { get; set; }
public MainWindow()
{
InitializeComponent();
LoadBitmap();
DataContext = RouteImage;
}
public void LoadBitmap()
{
RouteImage = new BitmapImage();
var PackedFile = @"D:\Temp\MainContent.ap";
try
{
{
using (ZipArchive archive = ZipFile.OpenRead(PackedFile))
{
var file = archive.GetEntry("RouteInformation/image.png");
if (file != null)
{
using (var zipEntryStream = file.Open())
{
RouteImage.BeginInit();
RouteImage.CacheOption = BitmapCacheOption.OnLoad;
RouteImage.StreamSource = zipEntryStream;
RouteImage.EndInit();
return;
}
}
}
}
}
catch (Exception e)
{
var s = "Exception: " + e.Message;
}
}
}
}
XAML 代码如下所示:
<Image Height="128" Width="256" Source="{Binding BitmapImage}"/>
在调试器中,看起来流已创建并绑定到 BitmapImage,但宽度和高度设置为 1。所以我认为读取 zip 文件中的数据有问题。
【问题讨论】:
-
不应该是 Source="{Binding}" 因为 DataContext 是 BitmapImage?
-
首先。您的 Window DataContext 不是您的 BitmapImage。例如,创建一个新类作为您的窗口 DataContext=new yourclass(必须实现 inotifypropertychanged 接口的 ViewModel)并创建一个属性。 (此属性名称应与 xaml 部分中的绑定源名称相同。)设置 BitmapImage 后调用 OnPropertyChanged。
-
感谢您的快速回复,S.Toniolo 我测试过,但没有任何区别。是的,如果绑定对象是明确的,您可以省略它,但显式使用它似乎没有害处。我发布了测试代码,在现实世界中,我想要公开的类有更多的数据要绑定。你也许是对的,我仍然对 WPF 难以学习它感到很困惑。
标签: c# wpf zip bitmapimage