using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; namespace PDF_Office.Helper { /// /// 1 FindVisualParent 查找目标类型的父类控件 /// 2 FindVisualChild 查找目标类型的子类控件 /// 3 GetPageParmFromList 从页码集合获取页码字符串,如1,2,3 转换成1-3 /// 4 GetPagesInRange 校验PageRange 输入是否合法,且可返回List Pages 存放的索引值 /// public static class CommonHelper { /// /// 查找对象目标类型的父类控件 /// /// /// /// public static T FindVisualParent(DependencyObject obj) where T : class { try { while (obj != null) { if (obj is T) return obj as T; obj = VisualTreeHelper.GetParent(obj); } return null; } catch { return null; } } /// /// 根据对象查找目标类型的子类 /// /// /// /// public static childItem FindVisualChild(DependencyObject obj) where childItem : DependencyObject { try { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is childItem) return (childItem)child; else { childItem childOfChild = FindVisualChild(child); if (childOfChild != null) return childOfChild; } } return null; } catch { return null; } } /// /// 从页码集合获取页码字符串,如1,2,3 转换成1-3 /// /// /// public static string GetPageParmFromList(List pagesList) { string pageParam = ""; if (pagesList.Count != 0) { pagesList.Sort();//先对页码排序 for (int i = 0; i < pagesList.Count; i++) { if (i == 0) { pageParam += pagesList[0].ToString(); } else { if (pagesList[i] == pagesList[i - 1] + 1)//页码连续 { if (i >= 2) { if (pagesList[i - 1] != pagesList[i - 2] + 1) pageParam += "-"; } else pageParam += "-"; if (i == pagesList.Count - 1) { pageParam += pagesList[i].ToString(); } } else//页码不连续时 { if (i >= 2) { if (pagesList[i - 1] == pagesList[i - 2] + 1) pageParam += pagesList[i - 1].ToString(); } pageParam += "," + pagesList[i].ToString(); } } } } return pageParam; } /// /// 校验PageRange 输入是否合法,且可返回List Pages 存放的索引值 /// /// 返回的页面索引集合 /// 需要判断的文本 /// 页面总数 /// 例 new char[] { ',' } /// 例 new char[] { '-' } /// /// public static bool GetPagesInRange(ref List pageIndexList, string pageRange, int count, char[] enumerationSeparator, char[] rangeSeparator, bool inittag = false) { string[] rangeSplit = pageRange.Split(enumerationSeparator);//根据分隔符 拆分字符串 pageIndexList.Clear(); foreach (string range in rangeSplit) { int starttag = 1; if (inittag) { starttag = 0; } if (range.Contains("-"))//连续页 { try { string[] limits = range.Split(rangeSeparator);//对子字符串再根据”-“ 拆分 if (limits.Length >= 2 && !string.IsNullOrWhiteSpace(limits[0]) && !string.IsNullOrWhiteSpace(limits[1])) { int start = int.Parse(limits[0]); int end = int.Parse(limits[1]); if ((start < starttag) || (end > count) || (start > end)) { return false; } for (int i = start; i <= end; ++i) { if (pageIndexList.Contains(i)) { return false; } pageIndexList.Add(i - 1); } continue; } } catch { return false; } } int pageNr; try { // Single page pageNr = int.Parse(range);//单页 } catch//格式不正确时 { return false; } if (pageNr < starttag || pageNr > count) { return false; } if (pageIndexList.Contains(pageNr)) { return false; } pageIndexList.Add(pageNr - 1); } return true; } } }