none
如何获取ListBox中的元素高度 RRS feed

  • 问题

  • 用一个ObservableCollection作为ListBox的源,添加了一些元素后,元素的大小不是固定的,有大有小。我可以通过滚动条的属性获取当前滚动的高度,但是如何计算每个元素的大小,获取到当前显示的元素是哪些?。比如当前滚动到的是第5到第10个元素。

    还有,请教下如何验证我的帐户,目前我仍不能发图片




    • 已编辑 Zhi_MN 2019年10月16日 3:09
    2019年10月16日 3:07

答案

  •  

    我已经找到其它方法:这个方法要简单些有效得多:

    ListBoxItem container = MessageListBox.ItemContainerGenerator.ContainerFromItem(MessageListBox.Items[0]) as ListBoxItem;
    double height = container.ActualHeight;

    • 已标记为答案 Zhi_MN 2019年10月16日 6:04
    2019年10月16日 6:03

全部回复


  • Hi  Zhi_MN,

    VisualTreeHelper提供了一组WPF控件树模型,通过VisualTreeHelper可以遍历控件的树形结构,获取我们所需要的控件以及相应的属性。

    供参考:
    https://www.cnblogs.com/xibei666/p/4377337.html

    >> 还有,请教下如何验证我的帐户,目前我仍不能发图片

    你可以通过下面的link尝试去验证。
    https://social.technet.microsoft.com/Forums/en-US/home?forum=reportabug

    Note: This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet. 

    Best regards

    Yong Lu

     

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年10月16日 5:50
    版主
  • 这个方法我早已找到,但是对于listbox好像不能获取里面的Item,因为我是用Itemsources绑定到ObservableCollection 的,也尝试用获取ScrollViewer再用VisualTreeHelper找到子控件,但是该方法传递ScrollViewer控件会报错,且这样操作太繁琐,需要遍历 多个内层控件。

     不过,还是感谢你作出回答。


    • 已编辑 Zhi_MN 2019年10月16日 6:01
    2019年10月16日 6:00
  •  

    我已经找到其它方法:这个方法要简单些有效得多:

    ListBoxItem container = MessageListBox.ItemContainerGenerator.ContainerFromItem(MessageListBox.Items[0]) as ListBoxItem;
    double height = container.ActualHeight;

    • 已标记为答案 Zhi_MN 2019年10月16日 6:04
    2019年10月16日 6:03