private static void OnHighlighterChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { HighlightedTagsPanel panel = d as HighlightedTagsPanel; if (panel != null) { ITagSource tagsource = panel.TagSource; if (tagsource != null) { TextSplitter highlighter = e.NewValue as TextSplitter; if (highlighter == null) { highlighter = new TextSplitter(); } bool firstMatch = false; int i = 0; foreach (IHighlightableTagDataContext ctx in tagsource.TagDataContextCollection) { ctx.Highlighter = highlighter; Control ctrl = (Control)panel.tagsPanel.Children[i]; if (!firstMatch && ctx.HasHighlights) { ctrl.BringIntoView(); firstMatch = true; } ctrl.Focusable = ctx.HasHighlights; i++; } } } }
private static void OnTagSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { HighlightedTagsPanel panel = d as HighlightedTagsPanel; if (d != null) { ITagSource old = e.OldValue as ITagSource; if (old != null) { old.CollectionChanged -= panel.OnTagdataContextCollectionChanged; } ITagSource newTagSource = e.NewValue as ITagSource; if (newTagSource != null) { newTagSource.CollectionChanged += panel.OnTagdataContextCollectionChanged; panel.OnTagdataContextCollectionChanged(newTagSource, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } } }