/// <summary> /// 根据后缀选择最佳视图,并且切换至最佳视图 /// </summary> /// <param name="extension">要切换的后缀</param> /// <param name="argsType">打开方式</param> private IFileViewer _Open(string extension, FileViewerArgsType argsType) { if (this.FileViewers == null || this.FileViewers.Count == 0) { return(null); } FileViewerType type = FileViewerConfig.Config.BestSupport(extension, argsType, this.FileViewers.Select(p => p.ViewerType).ToArray()); IFileViewer viewer = this.FileViewers.Where(p => p.ViewerType == type).FirstOrDefault(); foreach (UIElement ui in this.FileViewers) { if (ui == null) { continue; } if (ui == viewer) { ui.Visibility = System.Windows.Visibility.Visible; IFileViewer ifv = ui as IFileViewer; } else { ui.Visibility = System.Windows.Visibility.Collapsed; } } this.CurrentFileViewer = viewer; return(viewer); }
/// <summary> /// 最佳支持的视图(根据视图支持优先级确定) /// </summary> /// <param name="extension">扩展名</param> /// <param name="type">打开方式</param> /// <returns></returns> public FileViewerType BestSupport(string extension, FileViewerArgsType type) { if (extension.IsNullOrEmptyOrWhiteSpace()) { return(FileViewerType.None); } var q = from i in this.Items from e in i.Extensions where e.Extension.ToLower().Trim().Equals(extension.Trim().ToLower()) && (((type == FileViewerArgsType.Stream || type == FileViewerArgsType.Buffer) && i.IsSupportStream) || type == FileViewerArgsType.Path) orderby e.Priority select i.FileViewer; if (q.Count() == 0) { if (!extension.IsNullOrEmptyOrWhiteSpace() && type == FileViewerArgsType.Path) { return(FileViewerType.Hex); } else { return(FileViewerType.None); } } else { return(q.First()); } }