using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Windows; using System.Windows.Controls; using System.Security.Cryptography; namespace XHandler.Class { /// /// 工具类 /// public class Utilities { /// /// 获取父元素 /// /// /// /// public static T FindVisualParent(DependencyObject obj) where T : class { while (obj != null) { if (obj is T) { return obj as T; } obj = VisualTreeHelper.GetParent(obj); } return null; } /// /// 获取第一个子控件 /// /// /// /// public static ChildType FindVisualChild(DependencyObject obj) where ChildType : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is ChildType) { return child as ChildType; } else { ChildType childOfChildren = FindVisualChild(child); if (childOfChildren != null) { return childOfChildren; } } } return null; } /// /// 获取指定类型的所有子控件 /// /// /// /// public static List FindAllVisualChild(DependencyObject obj) where ChildType : DependencyObject { List children = new List < ChildType >(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is ChildType) { children.Add(child as ChildType); } else { List childOfChildren = FindAllVisualChild(child); if (childOfChildren != null&& childOfChildren.Count>0) { children.AddRange(childOfChildren); } } } return children; } /// /// 获取最后一个子控件 /// /// /// /// public static ChildType FindLastVisualChild(DependencyObject obj) where ChildType : DependencyObject { for (int i = VisualTreeHelper.GetChildrenCount(obj)-1; i >=0; i--) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is ChildType) { return child as ChildType; } else { ChildType childOfChildren = FindLastVisualChild(child); if (childOfChildren != null) { return childOfChildren; } } } return null; } /// /// 移除元素 /// /// public static void RemoveChild(UIElement element) { Window wnd = Application.Current.MainWindow; Grid grid = Utilities.FindVisualChild(wnd); grid.Children.Remove(element); } public static TreeViewItem GetDataFromTreeViewItem(TreeView source, Point point) { UIElement element = source.InputHitTest(point) as UIElement; //直接获取最底层的元素,这里是textblock if (element != null) { return FindVisualParent(element);//获取父控件 } return null; } public static TreeViewItem FindTreeViewItem(ItemsControl item, object data) { TreeViewItem findItem = null; bool itemIsExpand = false; if (item is TreeViewItem) { TreeViewItem tviCurrent = item as TreeViewItem; itemIsExpand = tviCurrent.IsExpanded; if (!tviCurrent.IsExpanded) { //如果这个TreeViewItem未展开过,则不能通过ItemContainerGenerator来获得TreeViewItem tviCurrent.SetValue(TreeViewItem.IsExpandedProperty, true); //必须使用UpdaeLayour才能获取到TreeViewItem tviCurrent.UpdateLayout(); } } for (int i = 0; i < item.Items.Count; i++) { TreeViewItem tvItem = (TreeViewItem)item.ItemContainerGenerator.ContainerFromIndex(i); if (tvItem == null) continue; object itemData = item.Items[i]; if (itemData == data) { findItem = tvItem; break; } else if (tvItem.Items.Count > 0) { findItem = FindTreeViewItem(tvItem, data); if (findItem != null) break; } } if (findItem == null) { TreeViewItem tviCurrent = item as TreeViewItem; tviCurrent.SetValue(TreeViewItem.IsExpandedProperty, itemIsExpand); tviCurrent.UpdateLayout(); } return findItem; } public static bool isNumberic(string _string) { if (string.IsNullOrEmpty(_string)) return false; foreach (char c in _string) { if (!char.IsDigit(c)) //if(c<'0' || c>'9')//最好的方法,在下面测试数据中再加一个0,然后这种方法效率会搞10毫秒左右 return false; } return true; } public static string GetMD5(string password) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] bytValue, bytHash; bytValue = System.Text.Encoding.UTF8.GetBytes(password); bytHash = md5.ComputeHash(bytValue); md5.Clear(); string sTemp = ""; for (int i = 0; i < bytHash.Length; i++) { sTemp += bytHash[i].ToString("X").PadLeft(2, '0'); } return sTemp.ToLower(); } /// /// 查询通道在通道组中的下标值 /// /// /// /// public static int GetArrayIndex(int[] chArray,int chNum) { int index = 0; for(int i=0;i< chArray.Length;i++) { if (chArray[i]==chNum) { index = i; break; } } return index; } public static float[] GetFloatArrayFromStringArray(string[] strArray) { float[] floatArray= new float[strArray.Length]; for(int i=0;i