diff --git a/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs b/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs index b42a57ebe..908154aa5 100644 --- a/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs +++ b/src/Shared/HandyControl_Shared/Controls/Image/ImageViewer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ComponentModel; using System.IO; using System.Windows; @@ -432,6 +432,12 @@ public override void OnApplyTemplate() var t = new RotateTransform(); BindingOperations.SetBinding(t, RotateTransform.AngleProperty, new Binding(ImageRotateProperty.Name) { Source = this }); _imageMain.LayoutTransform = t; + //在选项卡中可能会加载失败,这里渲染后在加载一次 + if (_imageMain.Source == null && ImageSource != null) + { + _imageMain.Source = ImageSource; + Init(); + } } if (_canvasSmallImg != null) @@ -584,7 +590,7 @@ private void ButtonSave_OnClick(object sender, RoutedEventArgs e) var path = SaveFileDialog.FileName; using var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write); var encoder = new PngBitmapEncoder(); - encoder.Frames.Add(BitmapFrame.Create(ImageSource)); + encoder.Frames.Add(ImageSource); encoder.Save(fileStream); } } @@ -983,7 +989,8 @@ static BitmapFrame GetBitmapFrame(Uri source) { try { - return BitmapFrame.Create(source); + //将图片在加到内存中,这样子外部软件,程序都可以读取,删除这个文件 + return BitmapFrame.Create(source, BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnLoad); } catch { @@ -1012,4 +1019,16 @@ public void Dispose() Dispose(disposing: true); GC.SuppressFinalize(this); } + + /// + /// 加载图片(可以避免在某些情况下加载失败的情况) + /// + /// 地址 + public void LoadImage(Uri uri) + { + Uri = uri; + ImageSource = BitmapFrame.Create(uri, BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnLoad); + if (_imageMain != null)//在继承等某些情况下肯定会失败,直接使用属性直接赋值才有用 + _imageMain.Source = ImageSource; + } }