我有一个解决方案,我根据用户标准生成一个DataGrid(或多个实例)..每个网格通过ObservableCollection继续接收数据
我遇到的问题是滚动表现得很奇怪.这是不稳定的,滚动条会在滚动时调整自己的大小.
比我发现.. CanContentScroll属性!它完全修复了奇怪的滚动行为,带给我暂时的幸福和快乐.
然而,它会导致2个不幸的副作用.
每当我重新创建网格实例并将它们绑定到我的可观察集合时,它会冻结整个窗口5秒钟.当我的网格增长到一个大尺寸时,这种延迟可以持续30秒.
当我调用TradeGrid.ScrollIntoView(TradeGrid.Items(TradeGrid.Items.Count - 1))滚动到底部时,它会跳到底部而不是回到顶部.
还有另一种方法可以实现平滑滚动吗?
我有一个ListBox,其属性VirtualizingStackPanel.VirtualizationMode设置为"Recycling".我正在绑定自定义集合(implements IList和IList<T>).
现在,如果我理解正确,当绑定数据时,将调用GetEnumerator.
然后public T this[int index] { }为当前视图中的每个项调用属性.
我的问题是如何获取当前可见的项目(加载数据后)?
我在WPF中使用ScrollView,我的应用程序允许用户单击按钮,然后它将自动滚动滚动视图,我在按钮单击事件中使用ScrollToVerticalOffset(),但scrollview没有更改任何内容.
我在互联网上搜索过这个问题,但到目前为止我还不能解决它.
还有一个问题:ScrollToVerticalOffset()取一个double作为参数,它可能会滚动到特殊像素,有没有办法滚动到n个项目(不是像素)?
这是我的代码
<ScrollViewer x:Name="scrollViewerChannelBtns" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center"
Background="Transparent" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden"
CanContentScroll="True" ScrollChanged="ScrollViewerChannelBtns_ScrollChanged">
<StackPanel x:Name="channelBtns" Orientation="Vertical">
<ItemsControl x:Name="channelBtnItems" ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ToggleButton x:Name="tgbChannelName" Width="{Binding Path=ChannelNameBtnWidth}" Height="{Binding Path=ChannelNameBtnHeight}" HorizontalAlignment="Left" VerticalAlignment="Center" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" Content="{Binding Path=ChannelName}" Tag="{Binding Path=Index}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
C#代码
//The button click event handled
private void BtnScrollDownClicked(object sender, RoutedEventArgs e)
{ scrollViewerChannelBtns.ScrollToVerticalOffset(scrollViewerChannelBtns.VerticalOffset + 50);
}
private void BtnScrollUpClicked(object sender, RoutedEventArgs e)
{ scrollViewerChannelBtns.ScrollToVerticalOffset(scrollViewerChannelBtns.VerticalOffset - 50);
}
Run Code Online (Sandbox Code Playgroud)
非常感谢,T&T