2012-01-22 49 views
3

我正在創建某種聊天風格的應用程序。 Listbox被它的ItemSource填充,它是一個綁定到列表。 「消息」是一個包含各種屬性的自定義類。 ListBox包含一個DataTemplate,用於正確顯示Message-Item。擴展列表框或使用替代方法?

我在使用ListBox時遇到了一些問題:
1.用戶無法選擇文本。
2.當項目被添加到列表中時,ListBox不會自動向下滾動。

我想使用類似於TextBox的東西,但我無法弄清楚如何使用某種DataTemplate並將Text-Property綁定到列表。當然,文本應該是可格式化的。

我能做些什麼來解決我的問題嗎?我想過將ListBox控件擴展爲自動滾動控件,但這並不能解決我有關文本選擇的問題。

+1

爲什麼不使用'ItemsControl'並實現自己的東西來自動滾動它?我懷疑你需要跟蹤'SelectedItem',如果沒有它,你可以選擇你的文本(提供你使用'Labels'而不是'TextBlocks') – Rachel

回答

2

我找到了解決方案。 我複製了ItemTemplate並將其粘貼到新的ItemsControl控件中。之後,我圍繞ItemsControl包裝了ScrollViewer。我添加了一個事件處理程序到ListChanged事件。在事件處理程序中,我調用了MatějZábský發佈的ItemsControl-Wrapping ScrollViewer的ScrollToBottom-方法。 爲了解決有關文本選擇的問題,我使用了一個TextBox,其中改變了特定的屬性。 Any way to make a WPF textblock selectable?

謝謝你,雷切爾和馬蒂傑。

0

可能你需要重新思考並使用某種ReachTextBox加上TextBox進行輸入。

1

您當然可以使用DataTemplate並將ListBox中的每個項目設置爲TextBox。

至於「2.列表框,當一個項目是被添加到該列表不會自動向下滾動。」,呼籲ScrollToBottom在ListBox的ScrollViewer中(可以使用LogicalTreeHelper找到它)。