如何知道ListBox何时在Silverlight中完成渲染?

如何知道ListBox何时在Silverlight中完成渲染?,第1张

概述我需要知道ListBox何时第一次完成渲染,以便我可以将其滚动到顶部以向用户显示列表中的第一个项目. 我有一个ListBox,在其DataTemplate中使用RichTextBox: <DataTemplate x:Key="HelpTextTemplate"> <Grid> <Grid.ColumnDefinitions> <ColumnDefi 我需要知道ListBox何时第一次完成渲染,以便我可以将其滚动到顶部以向用户显示列表中的第一个项目.

我有一个ListBox,在其DataTemplate中使用RichTextBox:

<DataTemplate x:Key="HelpTextTemplate">    <GrID>        <GrID.ColumnDeFinitions>            <ColumnDeFinition WIDth="*"/>            <ColumnDeFinition WIDth="auto"/>        </GrID.ColumnDeFinitions>        ...        <ContentControl>            ...            <RichTextBox x:name="HelpTextContent" GrID.Row="1"                         Tag="{Binding Path=HelpObject.Text,Mode=TwoWay}"                         textwrapPing="Wrap"                         HorizontalAlignment="Stretch"                         margin="0,20,0"                         Loaded="RichTextBox_Loaded"                         ContentChanged="RichTextBox_ContentChanged"                         SelectionChanged="RichTextBox_SelectionChanged"/>            ...        </ContentControl>        ...    </GrID></DataTemplate>

ListBox绑定到ObservableCollection.

我在滚动ListBox时遇到问题 – 如果RichTextBox的高度大于ListBox的高度,则用户无法滚动到RichTextBox的底部. ListBox将跳转到列表中的下一个项目.滚动条滑块的高度也会改变.这是因为RichTextBox的实际高度仅在实际渲染时计算.当它离开屏幕时,高度恢复到较小的值(我认为代码假定文本可以全部放在一行而不是必须被包裹).

我将这些问题跟踪到ListBox使用VirtualisingStackPanel来绘制项目.当我用简单的StackPanel替换它时,那些问题就消失了.

这就产生了我现在遇到的问题,即ListBox在初始加载时滚动到列表的底部. ListBox上的Loaded和LayoutUpdated事件在加载数据之前发生.初始化ObservableCollection时,我尝试在视图模型上侦听PropertyChanged事件:

voID editviewmodel_PropertyChanged(object sender,PropertyChangedEventArgs e){    switch (e.Propertyname)    {        case "ListDataSource":            // Try to scroll to the top of the ListBox            break;    }}

这太火了.触发此事件后将呈现该列表,并使ListBox滚动到底部.

解决方法 尝试滚动Loaded处理程序,但dispatcher稍微延迟它.这样的事情

voID OnLoaded(...){   dispatcher.BeginInvoke(() => {/*Scroll your ListBox here*/});}

它可以帮助.

总结

以上是内存溢出为你收集整理的如何知道ListBox何时在Silverlight中完成渲染?全部内容,希望文章能够帮你解决如何知道ListBox何时在Silverlight中完成渲染?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存