wpf - ListViewItem 滚动到视图中时的通知
问题描述
以下代码应该将项目滚动到视图中并将焦点设置到模板中的第一个子控件:
lv.ScrollIntoView(lv.SelectedItem);
var lvi = lv.SelectedListViewItem();
//get the item's template parent
var templateParent = lvi.GetFrameworkElementByName<ContentPresenter>();
if (templateParent != null) <--but it's always null
{
var ctrl = templateParent.FindVisualChildren<FrameworkElement>().First();
ctrl.Focus();
}
问题是如果ListViewItem
不可见,templateParent
则为空,并且此代码不起作用。当然,此代码仅在项目尚不可见时才有用。
有没有办法将项目滚动到视图中,然后在它进入视图时收到通知,以便模板不为空,以便ctrl.Focus()
代码执行?
解决方案
你可以处理这个RequestBringIntoView
事件。请参考以下示例代码。
public MainWindow()
{
InitializeComponent();
lv.ItemsSource = Enumerable.Range(1, 100);
lv.SelectedItem = 90;
lv.ScrollIntoView(lv.SelectedItem);
lv.RequestBringIntoView += Lv_RequestBringIntoView;
}
private void Lv_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
var container = lv.ItemContainerGenerator.ContainerFromItem(lv.SelectedItem);
if (container != null)
{
//...
}
}
推荐阅读
- android - Google Play 商店将设备标记为不兼容
- javascript - 将数组项的顺序列表设置为零的最快方法
- php - PHP curl提交空有效载荷
- javascript - 输出顺序涉及到promise,js中的微任务队列
- python - 如何通过另一列的最小值过滤重复的数据框?
- python-3.6 - 如何从主目录中的配置文件中读取值?
- html - 如何使边距填充剩余的可用 div?
- javascript - 如何防止 firebase Web UI 自动向下滚动到登录部分?
- sql - 如何在 SQL 中仅提取第一张收据的数量
- php - PHP:安装 Pear 时出现“致命错误:调用未定义函数 _determineIfPowerpc”