Нарисуйте usercontrol, когда он находится в поле зрения.
Я работаю над проектом WPF MVVM, где у меня есть пользовательский элемент управления, который отображает некоторую статистику. Этот пользовательский элемент управления встроен в список. обычно я загружаю в список от 400 до 500 объектов пользовательского управления. Когда я загружаю около 400-500 экземпляров пользовательского элемента управления, обычно требуется больше времени для загрузки. Теперь я хочу загрузить элементы, которые присутствуют в представлении.
Примечание: Я не могу использовать VirtualizingPanel.VirtualizationMode, потому что в соответствии с требованиями клиента элементы не должны отображаться один под другим. Он хочет, чтобы это было как грид. Для достижения этого я использую панель пленкой внутри панели элементов управления ListBox.
Код списка:
<ListBox Name="lvDataBinding" SelectionMode="Single" ItemsSource="{Binding AllTiles}" VirtualizingPanel.VirtualizationMode="Recycling"> <ListBox.ItemsPanel > <ItemsPanelTemplate> <WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}"> </WrapPanel> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemTemplate> <DataTemplate> <custom:TileControl Margin="10" DataContext="{Binding}"/> </DataTemplate> </ListBox.ItemTemplate> <ListBox.ItemContainerStyle> <Style> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> </Style.Resources> </Style> </ListBox.ItemContainerStyle> <ListBox.GroupStyle> <GroupStyle> <GroupStyle.ContainerStyle> <Style TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Expander Header="{Binding}" IsExpanded="True"> <Expander.HeaderTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Background="Transparent"> <TextBlock Text="{Binding Name}" TextBlock.FontSize="20" /> </StackPanel> </DataTemplate> </Expander.HeaderTemplate> <ItemsPresenter /> </Expander> </ControlTemplate> </Setter.Value> </Setter> </Style> </GroupStyle.ContainerStyle> </GroupStyle> </ListBox.GroupStyle> </ListBox>
Как я могу нарисовать элементы, которые присутствуют в поле зрения?
Поскольку это нарушает политику моей компании, я не могу добавить полный исходный код.
Что я уже пробовал:
Попробовал виртуализировать свойство панели, но оно будет работать только в том случае, если панель является стековой панелью