gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:59:25 24 4
gpt4 key购买 nike

我需要知道 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com