【问题标题】:ScrollintoView on Hidded Listbox does not work隐藏列表框上的 ScrollintoView 不起作用
【发布时间】:2011-12-21 16:44:13
【问题描述】:

我只想使用ListBox 并滚动到最后一行。只要列表框可见,那没问题。但是列表框位于 TabPage 上,当我使用另一个 PageIndex 并返回到我的列表框时,旧项目仍然被选中并滚动到而不是最后一项和最后一项的视图。

Dim st As New StackPanel
'''some code for stackpanel
Me.List1.Items.Add(st)
Me.List1.ScrollIntoView(st)

有什么想法吗?

【问题讨论】:

    标签: .net wpf uiscrollview controls


    【解决方案1】:

    我的猜测是您使用的是TabControl,当它们不可见时,它会将其处理为TabItems。这意味着当您切换选项卡时会重新创建项目,因此除非值绑定到 DataContext 中的某些内容,否则它们会丢失其值并恢复为默认值。

    最简单的解决方案是将SelectedItem 绑定到DataContext 中的某个内容,并确保在添加新项目时将它们设置为SelectedItem

    另一种解决方案是在切换标签时使用extend the TabControl to stop it from destorying it's children

    【讨论】:

    • 嗨,瑞秋。更改 TabIndex 时,TabControl 不会重建或释放控件。请重新检查。我不重建或重新创建控件。只是切换选项卡。从 TAB1 移动到 TAB3 时,我更改了 TAB3 上的 ListBox 选择。然后我去了 TAB1 并在代码隐藏中为(隐藏的)TAB3 创建了新的 ListEntries。我切换回 TAB3。新项目被创建。但是命令ScrollIntoView 没有他的工作。
    • @Nasenbaer 如果 TabItems 的模板相同,WPF 将回收显示的项目,而不是重建它。此外,如果某个项目未显示(例如,当您查看 Tab1 时,Tab3 上的 ListBox),则它在 Visual Tree 中不存在,并且无法响应 ScrollIntoView 等命令。如果要重新创建 TabItem,则需要在 Loaded 事件中运行 ScrollIntoView,如果要重用 TabItem 控件,则需要在 DataContextChanged 事件中运行。
    • 谢谢瑞秋。我无法测试它,因为在我的网格上,加载事件不是从页面调用的。它有点特别。谢谢你有趣的回答,我以前不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多