veeresh angadi Ответов: 1

Нарисуйте 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>


Как я могу нарисовать элементы, которые присутствуют в поле зрения?
Поскольку это нарушает политику моей компании, я не могу добавить полный исходный код.

Что я уже пробовал:

Попробовал виртуализировать свойство панели, но оно будет работать только в том случае, если панель является стековой панелью