- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有 ListView
(虚拟化默认开启),ItemsSource
绑定(bind)到 ObservableCollection<Item>
属性。
填充数据时(设置属性并发出通知)我在分析器中看到 2 个布局峰值,第二个发生在调用 listView.ScrollIntoView()
之后。
我的理解是:
ListView
通过绑定(bind)加载数据并为屏幕上的项目创建 ListViewItem
,从索引 0 开始。listView.ScrollIntoView()
。ListView
第二次执行此操作(创建 ListViewItem
s)。如何防止去虚拟化发生两次(我不希望在 ScrollIntoView
发生之前发生一次)?
我尝试使用 ListBox
进行重现。
xaml:
<Grid>
<ListBox x:Name="listBox" ItemsSource="{Binding Items}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
<Button Content="Fill" VerticalAlignment="Top" HorizontalAlignment="Center" Click="Button_Click" />
</Grid>
CS:
public class NotifyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string property = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
public class ViewModel : NotifyPropertyChanged
{
public class Item : NotifyPropertyChanged
{
bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged();
}
}
}
ObservableCollection<Item> _items = new ObservableCollection<Item>();
public ObservableCollection<Item> Items
{
get { return _items; }
set
{
_items = value;
OnPropertyChanged();
}
}
}
public partial class MainWindow : Window
{
ViewModel _vm = new ViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = _vm;
}
void Button_Click(object sender, RoutedEventArgs e)
{
var list = new List<ViewModel.Item>(1234567);
for (int i = 0; i < 1234567; i++)
list.Add(new ViewModel.Item());
list.Last().IsSelected = true;
_vm.Items = new ObservableCollection<ViewModel.Item>(list);
listBox.ScrollIntoView(list.Last());
}
}
Debug - Performance Profiler - Application Timeline...稍等一下,单击按钮,稍等一下,关闭窗口。您将看到 2 个带有 VirtualizingStackPanel
的布局 channel 。我的目标是只拥有一个,但我不知道怎么做。
repro 的问题是模拟负载(在创建 ListViewItem
is expensive 时),但我希望它现在能更清楚地说明问题。
最佳答案
Scroll 方法在 VirtualizingStackPanel
上通常不能很好地工作。为了解决这个问题,我使用了以下解决方案。
VirtualizingStackPanel
。为面板模板使用普通的 StackPanel。我通常会从这种方法中获得良好的性能。为了使其完全按照您的要求执行,您可能需要向 LazyControl 添加一些额外的逻辑以等待设置某些标志(在调用滚动方法之后)。
关于c# - 带有虚拟化的 ScrollIntoView 和 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38303201/
我正在制作一个网站,并制作了将元素滚动到视图中的JavaScript代码,我按下按钮的次数越多,滚动到视图中的元素的ID应该越高。它在Edge和Firefox上运行正常,但在Chrome上,它只在第一
我正在制作一个网站,并制作了将元素滚动到视图中的JavaScript代码,我按下按钮的次数越多,滚动到视图中的元素的ID应该越高。它在Edge和Firefox上运行正常,但在Chrome上,它只在第一
这个方法看起来是为了测试,但实际上我需要在使用更多小部件重建 UI 后将一个小部件滚动到屏幕上。 这存在于 GWT 世界中。 有什么方法可以在 Flutter 中实现这一点? 最佳答案 您可以使用 s
我有一个输入字段,它位于 (blur) 上或 (change)触发一个函数,该函数应该将页面滚动到下一个元素 block 。由于我忽略的原因,它不起作用,尽管在 (click) 上使用时它工作正常与按
我有一个嵌套的子容器,当我尝试 scrollIntoView 时,它破坏了父容器。我不明白为什么它会这样。请帮我解决这个问题。 请查看下面或 jsfiddle 上的代码 function moveTo
我想建立一个索引字母。当我单击字母(例如 A、B、C)时。它应该滚动到所属的标题。我在这里使用了 scrollIntoView 。除了“block:start”,一切都很好。当我想滚动到开始的标题时,
我有两个列表框的 View : 列表框 1 元素:A、B、C。 列表框 2 元素:...、A、...、B、...、C、...(长列表)。 当用户在列表框 1 中选择一个元素时,我想在列表框 2 中也将
我使用的是 Javascript(没有 jQuery),并且我有一个弹出的子菜单元素,它有时会超出查看器的底部,所以我使用scrollIntoView让子菜单立即移动以包含所有内容行项目完全在视口(v
我的网站有以下代码: function clickMe() { var element = document.getElementById('about'); element.scrollIn
使用javascript,我们可以使用- document.getElementById('pluginsource_wrapper').scrollIntoView(); 我可以理解scrollIn
当屏幕到达引用点(在方法滚动内部)时,如何停止滚动到 View ?(当屏幕到达其引用点时,我向上滚动一点,代码自动返回到引用点) interface Props { section: numb
如何制作 scrollIntoView只滚动直接父级(例如 div 和 overflow-y: scroll; )而不是整个页面? 我有一个网络界面,我正在为一个内部的、非常具体的目的而制作。我页面上
var mediaIdForFocus = 'mediaIdForFocus; ?>'; if(mediaIdForFocus) $('#flagimg'+mediaIdForFocus).get(0
我有一个非常基本的 scrollIntoView 函数,每当我单击导航栏中的链接时它就会运行。我遇到的问题是,当页面加载时,它会快速捕捉到滚动位置,然后又回到顶部。我怎样才能让它不会在页面的开头对齐?
我遇到一个问题,即在移动设备上使用 select2 jQuery 插件会出现问题,即,当下拉菜单被激活并且它在页面的底部时,虚拟键盘会覆盖选择选项。 为了解决这个问题,我想在页面打开之前将 selec
scrollIntoView() 函数有问题。我有一棵树和两个按钮: 首先将树滚动到底部节点 第二个将树滚动到顶部节点 我不知道我应该怎么做,这个滚动操作总是将节点滚动到树的顶部。我的意思是这个 fi
我正在使用 vanilla JS 让按钮平滑地向下滚动到 div 元素(目标 id) 我的代码是这样的: this.myButton.addEventListener("click",load_sec
我在事件目标上使用 scrollIntoView() 以确保它在其具有 overflow: scroll 的父项中可见,这主要是出于可访问性原因。 我的问题是我还有与该元素关联的点击事件,当点击事件也
有什么办法可以预防 scrollIntoView() 影响我尝试过的滚动监听器 evt.data.stopPropagation(); 和 elementos.scrollIntoView().
当我们使用 scrollIntoView(true) 时,整个页面布局向上移动。根据我的要求,我需要使用 true 参数。我需要避免这个举动。我在 https://jsfiddle.net/7v4t3
我是一名优秀的程序员,十分优秀!