Пример #1
0
 void SelectIndexCentered(int bestIndex)
 {
     if (bestIndex < 0)
     {
         listBox.ClearSelection();
     }
     else
     {
         int firstItem = listBox.FirstVisibleItem;
         if (bestIndex < firstItem || firstItem + listBox.VisibleItemCount <= bestIndex)
         {
             // CenterViewOn does nothing as CompletionListBox.ScrollViewer is null
             listBox.CenterViewOn(bestIndex);
             listBox.SelectIndex(bestIndex);
         }
         else
         {
             listBox.SelectIndex(bestIndex);
         }
     }
 }
Пример #2
0
        /// <summary>
        /// Selects the item that starts with the specified text.
        /// </summary>
        public void SelectItemWithStart(string startText)
        {
            if (string.IsNullOrEmpty(startText))
            {
                return;
            }
            if (listBox == null)
            {
                ApplyTemplate();
            }
            int selectedItem = listBox.SelectedIndex;

            int bestIndex   = -1;
            int bestQuality = -1;
            // Qualities: 0 = match start
            //            1 = match start case sensitive
            //            2 = full match
            //            3 = full match case sensitive
            double bestPriority = 0;

            for (int i = 0; i < completionData.Count; ++i)
            {
                string itemText = completionData[i].Text;
                if (itemText.StartsWith(startText, StringComparison.OrdinalIgnoreCase))
                {
                    double priority = 0;                     //completionData[i].Priority;
                    int    quality;
                    if (string.Equals(itemText, startText, StringComparison.OrdinalIgnoreCase))
                    {
                        if (startText == itemText)
                        {
                            quality = 3;
                        }
                        else
                        {
                            quality = 2;
                        }
                    }
                    else if (itemText.StartsWith(startText, StringComparison.Ordinal))
                    {
                        quality = 1;
                    }
                    else
                    {
                        quality = 0;
                    }
                    bool useThisItem;
                    if (bestQuality < quality)
                    {
                        useThisItem = true;
                    }
                    else
                    {
                        if (bestIndex == selectedItem)
                        {
                            useThisItem = false;
                        }
                        else if (i == selectedItem)
                        {
                            useThisItem = bestQuality == quality;
                        }
                        else
                        {
                            useThisItem = bestQuality == quality && bestPriority < priority;
                        }
                    }
                    if (useThisItem)
                    {
                        bestIndex    = i;
                        bestPriority = priority;
                        bestQuality  = quality;
                    }
                }
            }
            if (bestIndex < 0)
            {
                listBox.ClearSelection();
            }
            else
            {
                int firstItem = listBox.FirstVisibleItem;
                if (bestIndex < firstItem || firstItem + listBox.VisibleItemCount <= bestIndex)
                {
                    listBox.CenterViewOn(bestIndex);
                    listBox.SelectIndex(bestIndex);
                }
                else
                {
                    listBox.SelectIndex(bestIndex);
                }
            }
        }