static void GetIndices(IEnumerable <MenuItem> items, string[] headerTexts, int[] indices, int index) { int i = 0; foreach (var e in items) { if (e.Header.ToString() == headerTexts[index]) { indices[index] = i; if (index == indices.Length - 1) { return; } //次のメニューを開く IInvokeProvider invoker = new MenuItemAutomationPeer(e); invoker.Invoke(); foreach (var popup in SearcherInTarget.ByType <Popup>(TreeUtilityInTarget.VisualTree(e))) { GetIndices(SearcherInTarget.ByType <MenuItem>(TreeUtilityInTarget.VisualTree(popup.Child)), headerTexts, indices, index + 1); return; } break; } i++; } throw new NotSupportedException(ResourcesLocal3.Instance.ErrorNotFoundItem); }
static int GetItemCount(MenuItem item) { IInvokeProvider invoker = new MenuItemAutomationPeer(item); invoker.Invoke(); foreach (var p in SearcherInTarget.ByType <Popup>(TreeUtilityInTarget.VisualTree(item))) { int count = 0; foreach (var e in SearcherInTarget.ByType <MenuItem>(TreeUtilityInTarget.VisualTree(p.Child))) { count++; } return(count); } return(0); }
static int[] GetIndices(UIElement target, string[] headerTexts) { Clean cleaner = null; try { var menu = OpenMenu(target, out cleaner); int[] indices = new int[headerTexts.Length]; GetIndices(SearcherInTarget.ByType <MenuItem>(TreeUtilityInTarget.VisualTree(menu)), headerTexts, indices, 0); return(indices); } finally { if (cleaner != null) { cleaner(); } } }
internal static int GetItemCount(UIElement target, bool openByKey) { Clean cleaner = null; try { var menu = OpenMenu(target, openByKey, out cleaner); int count = 0; foreach (var e in SearcherInTarget.ByType <MenuItem>(TreeUtilityInTarget.VisualTree(menu))) { count++; } return(count); } finally { if (cleaner != null) { cleaner(); } } }
/// <summary> /// Search by Type from DependencyObject collection. /// </summary> /// <param name="collection">DependencyObject collection.</param> /// <param name="typeFullName">Target type.</param> /// <returns>Hit elements.</returns> #else /// <summary> /// タイプから要素を検索。 /// </summary> /// <param name="collection">DependencyObjectのコレクション。</param> /// <param name="typeFullName">検索対象のタイプ。</param> /// <returns>ヒットした要素。</returns> #endif public static IEnumerable <DependencyObject> ByType(this IEnumerable <DependencyObject> collection, string typeFullName) { return(SearcherInTarget.ByType(collection, typeFullName)); }
/// <summary> /// Search by Type from DependencyObject collection. /// </summary> /// <typeparam name="T">Target type.</typeparam> /// <param name="collection">DependencyObject collection.</param> /// <returns>Hit elements.</returns> #else /// <summary> /// タイプから要素を検索。 /// </summary> /// <typeparam name="T">検索対象のタイプ。</typeparam> /// <param name="collection">DependencyObjectのコレクション。</param> /// <returns>ヒットした要素。</returns> #endif public static IEnumerable <T> ByType <T>(this IEnumerable <DependencyObject> collection) where T : DependencyObject { return(SearcherInTarget.ByType <T>(collection)); }
/// <summary> /// Search by binding from DependencyObject collection. /// </summary> /// <typeparam name="T">Type of collection.</typeparam> /// <param name="collection">DependencyObject collection.</param> /// <param name="path">Binding path.</param> /// <param name="dataItem">DataItem.</param> /// <returns>Hit elements.</returns> #else /// <summary> /// Binding情報から要素を検索。 /// </summary> /// <typeparam name="T">コレクションのタイプ。</typeparam> /// <param name="collection">DependencyObjectのコレクション。</param> /// <param name="path">バインディングパス。</param> /// <param name="dataItem">DataItem。</param> /// <returns>ヒットした要素。</returns> #endif public static IEnumerable <T> ByBinding <T>(this IEnumerable <T> collection, string path, object dataItem = null) where T : DependencyObject { return(SearcherInTarget.ByBinding(collection, path, dataItem)); }