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

标签 silverlight listbox rendering

我需要知道 ListBox已经完成了第一次渲染,以便我可以将其滚动到顶部以向用户展示列表中的第一项。

我有一个 ListBox使用 RichTextBox在它的DataTemplate :

<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,0,20,0"
                         Loaded="RichTextBox_Loaded"
                         ContentChanged="RichTextBox_ContentChanged"
                         SelectionChanged="RichTextBox_SelectionChanged"/>
            ...
        </ContentControl>
        ...
    </Grid>
</DataTemplate>
ListBox绑定(bind)到 ObservableCollection .

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

我将这些问题追溯到 ListBox的使用 VirtualisingStackPanel绘制项目。当我用一个简单的 StackPanel 替换它时这些问题都消失了。

这产生了我现在遇到的问题,即 ListBox在初始加载时滚动到列表底部。 LoadedLayoutUpdated ListBox 上的事件在数据加载之前发生。我试着收听 PropertyChanged ObservableCollection 时 View 模型上的事件被初始化:
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*/});
}

它可以提供帮助。

关于silverlight - 我如何知道 ListBox 何时在 Silverlight 中完成渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291920/

相关文章:

Silverlight - 史诗般的图形失败(由两个三角形组成的矩形):(

c# - 如何根据复选框状态更改列表框选择,反之亦然?

.net - ListBoxItem 产生 "System.Windows.Data Error: 4"绑定(bind)错误

c# - 如何在列表框中设置多个项目为选中状态?

css - Mozilla 和 webkit 之间的字体渲染

c# - Silverlight Deepzoom API 输出与 Deepzoom Composer 输出

silverlight - Windows Phone 7的开发平台是什么

c# - 制作通用类 IEnumerable

c# - 在WPF C#中的wrappanel内部重新排列CustomControl

java - 第一次加载 Android 时 HIGHChart 不显示图表