使用IsVirtualizing="true"的WPF TreeView在更改焦点和滚动时跳动

13

我制作了一个简单的示例来重现我在TreeView上遇到的问题。如果我选择TreeView中的一个项目,向下滚动,改变Focus,然后再次选择TreeView中的一个项目,列表开始跳动。

只有当VirtualizingStackPanel.IsVirtualizing="True"时才会发生这种情况。这是已知的问题吗?是否有解决方法?

因此,要重现:

  1. 选择列表中的项目1。
  2. 滚动到列表底部。
  3. 点击顶部的文本框。
  4. 选择列表中的项目30。

我正在使用.Net 3.5 SP1,并尝试在64位XP和Vista上运行它。我没有在其他环境中尝试过。

更新:我已在.Net 4.0 Beta中进行了测试,该问题不会发生。是否有补丁程序可用?


<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <TextBox Grid.Row="0"></TextBox>

        <TreeView Grid.Row="1"
                  VirtualizingStackPanel.IsVirtualizing="True"
                  VirtualizingStackPanel.VirtualizationMode="Standard"
                  >          
            <TreeView.Items>
                <TreeViewItem Header="Header 1" IsExpanded="True">
                    <TreeViewItem.Items>
                        <TreeViewItem Header="Item 1" />
                        <TreeViewItem Header="Item 2" />
                        <TreeViewItem Header="Item 3" />
                        <TreeViewItem Header="Item 4" />
                        <TreeViewItem Header="Item 5" />
                        <TreeViewItem Header="Item 6" />
                        <TreeViewItem Header="Item 7" />
                        <TreeViewItem Header="Item 8" />
                        <TreeViewItem Header="Item 9" />
                        <TreeViewItem Header="Item 10" />
                        <TreeViewItem Header="Item 11" />
                        <TreeViewItem Header="Item 12" />
                        <TreeViewItem Header="Item 13" />
                        <TreeViewItem Header="Item 14" />
                        <TreeViewItem Header="Item 15" />
                        <TreeViewItem Header="Item 16" />
                        <TreeViewItem Header="Item 17" />
                        <TreeViewItem Header="Item 18" />
                        <TreeViewItem Header="Item 19" />
                        <TreeViewItem Header="Item 20" />
                        <TreeViewItem Header="Item 21" />
                        <TreeViewItem Header="Item 22" />
                        <TreeViewItem Header="Item 23" />
                        <TreeViewItem Header="Item 24" />
                        <TreeViewItem Header="Item 25" />
                        <TreeViewItem Header="Item 26" />
                        <TreeViewItem Header="Item 27" />
                        <TreeViewItem Header="Item 28" />
                        <TreeViewItem Header="Item 29" />
                        <TreeViewItem Header="Item 30" />
                    </TreeViewItem.Items>                    
                </TreeViewItem>
            </TreeView.Items>
        </TreeView>
    </Grid>
</Window>

非常感谢任何帮助!!!


2
这是一个又聪明又棒的漏洞!看起来它已经存在一段时间了,Marco Zhou在MSDN论坛上对此进行了调查。然而,他提出的解决方法并没有解决问题:http://bit.ly/4nJUme - rmoore
看起来修复确实有效,我遇到了构建错误,因此在测试时它没有使用新的类。 - rmoore
我在Silverlight Treeview中遇到了同样的问题。 - nipiv
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接