我有一個虛擬ItemsControl與標籤或文本框的列表。由於數據量大,需要虛擬化。現在我想通過與鍵盤的聆聽選項卡。這很好,直到它到達可見列表的末尾。比焦點離開列表。有沒有辦法「滾動」下一個可調焦控件的列表?問題是不是列表中的每個項目都有一個可調焦的控件。通過虛擬化ItemControl /列表掛鉤
下面是一個例子:
有沒有什麼有效的解決方案?例如,加載10個可見的項目。或者找到上次加載的可調焦項目並按代碼滾動。或者在顯示列表後在背景中顯示所有數據。內存不是瓶頸,它是列表的渲染時間。
我按照這些Virtualizing an ItemsControl?
這裏是行不通例如
<ItemsControl DockPanel.Dock="Top" x:Name="lb" Height="200" ItemsSource="{Binding testList}"
KeyboardNavigation.TabNavigation="Cycle"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Standard"
ScrollViewer.CanContentScroll="True"
AlternationCount="4"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel IsItemsHost="True" Orientation="Vertical" x:Name="virtualizingStackPanel" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Path=., Mode=OneWay}" Name="txtTest">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</TextBox.Style>
</TextBox>
<Label >space</Label>
</StackPanel>
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Visibility" Value="visible" TargetName="txtTest"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.Template>
<ControlTemplate>
<Border
BorderThickness="{TemplateBinding Border.BorderThickness}"
Padding="{TemplateBinding Control.Padding}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}"
SnapsToDevicePixels="True">
<ScrollViewer
Padding="{TemplateBinding Control.Padding}"
Focusable="False" >
<ItemsPresenter
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" Name="presenter"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
代碼隱藏
public List<string> testList {
get
{
List< string> a = new List<string>();
for (int i = 0; i < 10000; i++)
{
a.Add(i.ToString());
}
return a;
}
}
與KeyboardNavigation.TabNavigation =「週期」的重點轉到「可見」列表中的第一個元素,但不包含真實列表中的下一個元素 – Alex
適用於我的示例。你甚至嘗試過嗎?你也應該閱讀:https://stackoverflow.com/help/how-to-ask – mm8
是的,我試過這些。你的例子工作。但在我的項目中沒有evey項目有一個可以控制的焦點。在我的帖子中看到我的不工作示例 – Alex