From b8f829dbc32a48d5ee8aa807e35bda75b190baaa Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Mon, 9 Feb 2015 00:13:08 +0800 Subject: [PATCH] Add item number [WIP] --- Wox/Images/menu.png | Bin 346 -> 0 bytes Wox/ResultPanel.xaml | 5 ++-- Wox/ResultPanel.xaml.cs | 55 +++++++++++++++++++++++++++++++++++----- Wox/Themes/Base.xaml | 12 ++++++--- Wox/Themes/Gray.xaml | 3 +++ Wox/Wox.csproj | 3 --- 6 files changed, 62 insertions(+), 16 deletions(-) delete mode 100644 Wox/Images/menu.png diff --git a/Wox/Images/menu.png b/Wox/Images/menu.png deleted file mode 100644 index d7395f4d9fbc9552f63ae80b8e9dc81a69b108d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmV-g0j2(lP)_i805%p8yo?|oB#pKyMEoD$5(D2??fPI~X5lx?yjd1S(T#}CbWF9F zrs)#L@$(2B1i^#P^GxfyQkG@3EQ@l00V~FFWGGzMm5(|CE6TE@JkKSJ&ghER^KHdH z^`0ZDsycBbkmq^Y9)Oh|K=43U(gVw~499V3pF~xhb84FA&4*!N*fR`6>ib?fzReZ$`bwr$gHrm76XpfpVxZ`)RS;QKyxU8fviz>2!A1sqM1MEeS0 snQ5B$?S$7O9&AlsO!xo)*GGT>03%omcdi7(3jhEB07*qoM6N<$f@>X-X#fBK diff --git a/Wox/ResultPanel.xaml b/Wox/ResultPanel.xaml index a3ada3cd38..f221205206 100644 --- a/Wox/ResultPanel.xaml +++ b/Wox/ResultPanel.xaml @@ -24,7 +24,7 @@ - + @@ -36,13 +36,12 @@ - + - diff --git a/Wox/ResultPanel.xaml.cs b/Wox/ResultPanel.xaml.cs index 341c08e127..c52367f69c 100644 --- a/Wox/ResultPanel.xaml.cs +++ b/Wox/ResultPanel.xaml.cs @@ -130,21 +130,58 @@ namespace Wox public List GetVisibleResults() { - var theStackPanel = GetInnerStackPanel(lbResults); List visibleElements = new List(); - - for (int i = 0; i < theStackPanel.Children.Count; i++) + VirtualizingStackPanel virtualizingStackPanel = GetInnerStackPanel(lbResults); + for (int i = (int)virtualizingStackPanel.VerticalOffset; i <= virtualizingStackPanel.VerticalOffset + virtualizingStackPanel.ViewportHeight; i++) { - - if (i >= theStackPanel.VerticalOffset && i <= theStackPanel.VerticalOffset + theStackPanel.ViewportHeight) + ListBoxItem item = lbResults.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem; + if (item != null) { - FrameworkElement element = theStackPanel.Children[i] as FrameworkElement; - visibleElements.Add(element.DataContext as Result); + visibleElements.Add(item.DataContext as Result); } } return visibleElements; } + private void UpdateItemNumber() + { + VirtualizingStackPanel virtualizingStackPanel = GetInnerStackPanel(lbResults); + int index = 0; + for (int i = (int)virtualizingStackPanel.VerticalOffset; i <= virtualizingStackPanel.VerticalOffset + virtualizingStackPanel.ViewportHeight; i++) + { + index++; + ListBoxItem item = lbResults.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem; + if (item != null) + { + ContentPresenter myContentPresenter = FindVisualChild(item); + if (myContentPresenter != null) + { + DataTemplate dataTemplate = myContentPresenter.ContentTemplate; + TextBlock tbItemNumber = (TextBlock)dataTemplate.FindName("tbItemNumber", myContentPresenter); + tbItemNumber.Text = index.ToString(); + } + } + } + } + + + private childItem FindVisualChild(DependencyObject obj) where childItem : DependencyObject + { + 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; + } + private VirtualizingStackPanel GetInnerStackPanel(FrameworkElement element) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++) @@ -189,6 +226,10 @@ namespace Wox if (e.AddedItems.Count > 0 && e.AddedItems[0] != null) { lbResults.ScrollIntoView(e.AddedItems[0]); + Dispatcher.DelayInvoke("UpdateItemNumber", o => + { + UpdateItemNumber(); + }, TimeSpan.FromMilliseconds(3)); } } diff --git a/Wox/Themes/Base.xaml b/Wox/Themes/Base.xaml index afaf5bb9ad..39866e052c 100644 --- a/Wox/Themes/Base.xaml +++ b/Wox/Themes/Base.xaml @@ -38,6 +38,12 @@ + + diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 90937cd006..0a3a843e2e 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -334,9 +334,6 @@ PreserveNewest - - PreserveNewest - PreserveNewest