2009-05-29 7 views
14

Silverlightリストボックスをプログラムの強制的に下にスクロールして、最後に追加したアイテムが常に表示されるようにする方法はありますか。Silverlightリストボックスの自動スクロール

私は単にアイテムを選択しようとしました。選択されたものの最終的にはスクロールしない限り表示されません。

+0

+1私が想像することができるリストボックスの最も基本的な機能をSilverlightで取り除いた方法を指摘してください。 WinFormsにはそれが永遠にありました!あなたは現時点で実際にメンバーではないことを恥ずかしく思っています:) –

答えて

24

最後の項目を渡すListBoxのScrollIntoViewメソッドを使用します。 UpdateLayoutが呼び出される直前にUpdateLayoutを呼び出す必要があるかもしれません。

+1

これはまさに私が探していた答えです...私はそれを働かせることはできません。エルス )1 lst.ScrollIntoView(lst.SelectedItem) lst.UpdateLayout( - これは動作するはずのようにそれはlst.Items.Count> 0次に lst.SelectedIndex = lst.Items.Count場合 ...らしいです最後の項目は選択されていますが、表示されません。 –

+1

ScrollIntoViewを呼び出す前にUpdateLayoutを呼び出してください。うまくいけば、それはうまくいくでしょう。 –

+0

それはトリックでした。私が今欲しかったのとまったく同じです。ありがとうございました。 –

7

ScrollIntoView()メソッドは、最後のアイテムをビューにスクロールしますが、listBox.UpdateLayout()はScrollIntoView()の直前に呼び出される必要があります。ここでは、コードとの完全な方法である:

// note that I am programming Silverlight on Windows Phone 7 

    public void AddItemAndScrollToBottom(string message) 
    { 
     string timestamp = DateTime.Now.ToString("mm:ss"); 
     var item = new ListBoxItem(); 
     item.Content = string.Format("{0} {1}", timestamp, message); 
     // note that when I added a string directly to the listbox, and tried to call ScrollIntoView() it did not work, but when I add the string to a ListBoxItem first, that worked great 
     listBoxEvents.Items.Add(item); 

     if (listBoxEvents.Items.Count > 0) 
     { 
      listBoxEvents.UpdateLayout(); 
      var itemLast = (ListBoxItem)listBoxEvents.Items[listBoxEvents.Items.Count - 1]; 
      listBoxEvents.UpdateLayout(); 
      listBoxEvents.ScrollIntoView(itemLast); 
     } 
    } 
+0

ありがとう、うまくいく – ieaglle

4

は少しコードの行数を減らすためにリファクタリング:

listBoxEvents.Add(item) 
listBoxEvents.UpdateLayout() 
listBoxEvents.ScrollIntoView(listBoxEvents.Items(listBoxEvents.Items.Count - 1)) 
0

はちょうどこのおよびSilverlight 5のアプリで働いていた上記のソリューションのどれを通り抜けました。この解決策は次のようになりました。

関連する問題