Silverlight:禁用UI虚拟化?

Silverlight:禁用UI虚拟化?,silverlight,user-controls,listbox,virtualization,Silverlight,User Controls,Listbox,Virtualization,有没有一种简单的方法可以在ListBox控件上禁用UI虚拟化? 我试图使用“FindName()”方法在ListBox控件中查找控件,但如果该控件明显不在Web浏览器窗口中,则找不到该控件。我几乎可以肯定,罪魁祸首是UI虚拟化。 当控件从页面上滚下时,将不再通过“FindName()”成功检索该控件 第二次我滚动它回到屏幕上,它成功地返回控件 这是这个问题的延伸: 使用编码示例更新 这是我试图检索控件的代码。 “DynamicTagFormFields”是ListBox控件 textField

有没有一种简单的方法可以在ListBox控件上禁用UI虚拟化? 我试图使用“FindName()”方法在ListBox控件中查找控件,但如果该控件明显不在Web浏览器窗口中,则找不到该控件。我几乎可以肯定,罪魁祸首是UI虚拟化。 当控件从页面上滚下时,将不再通过“FindName()”成功检索该控件

第二次我滚动它回到屏幕上,它成功地返回控件

这是这个问题的延伸:

使用编码示例更新

这是我试图检索控件的代码。 “DynamicTagFormFields”是ListBox控件

textField tf = DynamicTagFormFields.FindName(s.KeyValue) as textField;
如果最终用户可以在屏幕上看到我试图检索的实际textField控件,则返回一个有效的“textField”对象。 但是,如果我使用ListBox的垂直滚动条将textField控件滚动到视图之外,然后再次强制执行该过程,上述代码将返回null

这是列表框的XAML:

 <ListBox x:Name="DynamicTagFormFields" Margin="0" Style="{StaticResource ListBoxStyle1}" ItemContainerStyle="{StaticResource ListBoxItemStyle4}" d:LayoutOverrides="Height" Grid.Row="2" IsTabStop="False" TabNavigation="Local" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
你试过这个吗:-

<ListBox x:Name="DynamicTagFormFields" Margin="0" Style="{StaticResource ListBoxStyle1}"
    ItemContainerStyle="{StaticResource ListBoxItemStyle4}" d:LayoutOverrides="Height"
    Grid.Row="2" IsTabStop="False" TabNavigation="Local"
    ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
       <ItemsPanelTemplate>
           <StackPanel />
       </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

默认面板为
VirtualisingStackPanel
,这可能是问题的原因

at 它介绍了以下关于DataGrid虚拟化的信息性内容,展示了两种关闭它的方法,第一种是在DataGrid周围添加一个ScrollViewer,实际上并不建议将其作为关闭行虚拟化的方法,因为DataGrid有一个标题行,所以它们还展示了如何更改其XAML模板。对于ListBox,虽然它没有这样的标题,但将其包装在ScrollViewer中是一个可行的选项,这样可以使其具有无限大的大小,从而关闭行虚拟化

…在数据网格周围放置一个ScrollViewer。这给了DataGrid 无限大,有效地关闭虚拟化。不幸的是 在我的项目中,我无意中做到了这一点,却没有意识到效果 关于性能。您确实需要使用DataGrid的滚动 条,而不是滚动查看器。请注意,如果要关闭用户界面 虚拟化(如小型网格)您可以重新为DataGrid设置模板 并将RowsPresenter放入ScrollViewer中,这将再次导致 它认为它有无限的大小。这很有用,因为您不会 滚动时不断获取LoadingRow和UnloadingGrow事件。 注意正确操作,以便列标题正确滚动 (参见本文末尾附录中的XAML)


我认为我们实际上发现这有点难以接受,而且很难接受,因为您还没有提供任何简单的Xaml,可以用于单独复制问题。当你说“从页面上滚下来”的时候,滚出来的到底是什么?浏览器滚动条?ScrollViewer控件?你所描述的会破坏很多东西,让人难以接受。我们需要更多的细节和良好的Xaml复制。先生,您是一位绅士和学者。这很有效。谢谢,我真的很感激。
<ListBox x:Name="DynamicTagFormFields" Margin="0" Style="{StaticResource ListBoxStyle1}"
    ItemContainerStyle="{StaticResource ListBoxItemStyle4}" d:LayoutOverrides="Height"
    Grid.Row="2" IsTabStop="False" TabNavigation="Local"
    ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
       <ItemsPanelTemplate>
           <StackPanel />
       </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>