/// <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);
        }
Exemple #2
0
        /// <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());
            }
        }