0

顧客情報をバインドするリストビューがあります。また、リストビューで検索できるテキストボックスがあります。テキストボックスに入力された文字または記号がデータリストアイテムと一致する場合、一致したアイテムが強調表示されます。これに関して、一致したアイテムの数を数えたいと思います。ただし、検索するたびにカウントは「0」になります。デバッグすると、foreachループではカウントはtrueになりますが、TxtSearch_PreviewKeyDownでは常にゼロになります。ご覧ください。一致したアイテムの金額を確認するにはどうすればよいですか?

 private int highlightcount;
    public int highlightCount
    {
        get;
        set;
    }       
    private void FindListViewItem(DependencyObject obj)
    {
        try
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                ListViewItem lv = obj as ListViewItem;
                if (lv != null)
                {
                    HighlightText(lv);
                }
                else
                    FindListViewItem(VisualTreeHelper.GetChild(obj as DependencyObject, i));
            }
        }
        catch
        {
            MessageBox.Show("Bevor Sie die Suche Stauten, wählen Sie bitte eine Adresse in der linken Spalte aus.");
        }
    }
    /// <summary>
    /// Method for highlighting matched listview item
    /// </summary>
    /// <param name="itx"></param>
   public void HighlightText(Object itx)
    {
        try
        {
            if (itx != null)
            {
                if (itx is TextBlock)
                {
                    Regex regex = new Regex("(" + TxtSearch.Text + ")", RegexOptions.IgnoreCase);
                    TextBlock tb = itx as TextBlock;
                    if (TxtSearch.Text.Length == 0)
                    {
                        string str = tb.Text;
                        tb.Inlines.Clear();
                        tb.Inlines.Add(str);
                        return;
                    }
                    string[] substrings = regex.Split(tb.Text);
                    tb.Inlines.Clear();

                    highlightCount = 0;
                    foreach (var item in substrings)
                    {
                        if (regex.Match(item).Success)
                        {                                
                            Run runx = new Run(item);
                            runx.Background = Brushes.Lime;                               
                            tb.Inlines.Add(runx);
                            highlightCount++;

                            if (tb.IsMouseOver)
                            {
                                tb.IsEnabled = false;                                   
                            }
                        }
                        else
                        {
                            tb.Inlines.Add(item);
                            tb.IsEnabled = false;                             
                        }                            
                    }                        
                    return ;
                } 
                else
                {
                    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(itx as DependencyObject); i++)
                    {
                        HighlightText(VisualTreeHelper.GetChild(itx as DependencyObject, i));
                    }
                }
            }
        }
        catch
        {
            MessageBox.Show("Suche Error");
        }
    }       
    private void TxtSearch_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (TxtSearch.Text.Length > 1 && e.Key==Key.Enter)
        {
            Mouse.OverrideCursor = Cursors.Wait;
            ListControl lc = getactivListview();
            FindListViewItem(lc);               
            Mouse.OverrideCursor = null;
            MessageBox.Show(highlightCount.ToString());
            FocusManager.SetFocusedElement(this, TxtSearch);  
        }
4

1 に答える 1

0

highlightCount = 0;HighlightText メソッドから削除して、 TxtSearch_PreviewKeyDownEventhandler に追加してみてください (上ListControl lc = getactivListview();または下MessageBox.Show(highlightCount.ToString());) 。

于 2012-12-13T07:05:38.890 に答える