Question

Je suis absolument nouveau dans WPF. Je ne peux pas comprendre pourquoi le VirtualizingStackPanel ne fonctionne pas pour les éléments suivants. J'ai déjà expérimenté le ScrollViewer mais cela ne fonctionne pas pour moi. J'ai essayé de placer VirtualizingStackPanel partout, mais cela ne semble avoir aucun effet. Le ComboBox lorsqu'il est rempli avec 3000 éléments et chaque élément a une image 16x16, prend environ 30 secondes pour apparaître. Ainsi, toute aide sera appréciée.

Mise à jour: le datatemplate a été ajouté

<DataTemplate x:Key="ComboBoxItemTemplate">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="20"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="col1"/>
                <ColumnDefinition Width="Auto" SharedSizeGroup="col2"/>
                <ColumnDefinition Width="Auto" SharedSizeGroup="col3"/>
                <ColumnDefinition Width="Auto" SharedSizeGroup="col4"/>
                <ColumnDefinition Width="Auto" SharedSizeGroup="col5"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image
            Width="16"
            Height="16"
            Margin="1"
            Source="{Binding Image}"/>
            <StackPanel Grid.Column="1" Margin="1">
                <TextBlock Text="{Binding DisplayName}"/>
            </StackPanel>
            <StackPanel Grid.Column="2" Margin="5,1,1,1">
                <TextBlock Text="{Binding Column2}"/>
            </StackPanel>
            <StackPanel Grid.Column="3" Margin="5,1,1,1">
                <TextBlock Text="{Binding Column3}"/>
            </StackPanel>
            <StackPanel Grid.Column="4" Margin="5,1,1,1">
                <TextBlock Text="{Binding Column4}"/>
            </StackPanel>
            <StackPanel Grid.Column="5" Margin="5,1,1,1">
                <TextBlock Text="{Binding Column5}"/>
            </StackPanel>
            <StackPanel Grid.Column="6" Margin="5,1,1,1">
                <TextBlock Text="{Binding InheritanceDescription}"/>
            </StackPanel>
        </Grid>
    </DataTemplate>

    <Style TargetType="{x:Type local:ComboBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:ComboBox}">
                    <Grid x:Name="LayoutRoot" Width="Auto" Height="Auto">
                        <Grid.Resources>
                            <Style x:Key="AlternatingRows" TargetType="{x:Type ComboBoxItem}">
                                <Setter Property="Width" Value="{Binding Path=Dropdownwidth, RelativeSource={RelativeSource AncestorType={x:Type local:ComboBox}}}" />
                                <Setter Property="Background" Value="#FFE7ECF5"/>
                                <Setter Property="UIElement.IsEnabled" Value="{Binding IsEnabled}"/>
                            </Style>
                        </Grid.Resources>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Label
                            Grid.Column="0"
                            HorizontalAlignment="Left" HorizontalContentAlignment="Left"
                            Margin="4,2,4,2"
                            Visibility="{Binding Path=NameVisibility, RelativeSource={RelativeSource TemplatedParent}}"
                            Target="{Binding ElementName=combobox1}">
                            <AccessText Text="{Binding Path=DisplayName, Converter={StaticResource appendColon}, RelativeSource={RelativeSource TemplatedParent}}"/>
                        </Label>
                        <ComboBox
                         x:Name="combobox1"
                         IsEditable="False"
                         AlternationCount="2"
                         Width="{Binding Path=ChildWidth, RelativeSource={RelativeSource TemplatedParent}}"
                         Grid.Column="1"
                         Grid.IsSharedSizeScope="True"
                         HorizontalAlignment="Left"
                         ItemContainerStyle="{StaticResource AlternatingRows}"
                         Margin="0,2,4,2"
                         ItemTemplate="{StaticResource ComboBoxItemTemplate}"
                         SelectedItem="{Binding Path=SelectedItem, RelativeSource={RelativeSource TemplatedParent}}"
                         ToolTip="{Binding Path=Description, RelativeSource={RelativeSource TemplatedParent}}"
                         BorderBrush="#95B7F3">
                            <ComboBox.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True"  VirtualizingStackPanel.VirtualizationMode="Recycling"/>
                                </ItemsPanelTemplate>
                            </ComboBox.ItemsPanel>
                        </ComboBox>
                        <StackPanel Grid.Column="2" Orientation="Horizontal" Width="Auto" Height="Auto">
                        <Label HorizontalAlignment="Left" HorizontalContentAlignment="Left" Margin="4,2,4,2" Height="Auto" Width="Auto"
                                Visibility="{Binding Path=UnitVisibility, RelativeSource={RelativeSource TemplatedParent}}"
                               >
                            <TextBlock Text="{Binding Path=DisplayUnit, RelativeSource={RelativeSource TemplatedParent}}"/>
                        </Label>
                        <Label Target="{Binding ElementName=combobox1}" HorizontalAlignment="Left" HorizontalContentAlignment="Left" Margin="4,2,4,2" Height="Auto" Width="Auto" MaxWidth="450"
                                Visibility="{Binding Path=DescriptionVisibility, RelativeSource={RelativeSource TemplatedParent}}"
                               >
                            <AccessText Text="{Binding Path=Description, RelativeSource={RelativeSource TemplatedParent}}" ToolTip="{Binding Path=Description, RelativeSource={RelativeSource TemplatedParent}}" TextTrimming="WordEllipsis" TextWrapping="Wrap"/>
                        </Label>
                        </StackPanel>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Était-ce utile?

La solution

La propriété de votre image - l'avez-vous fait pour que cela crée l'image lorsque vous accédez à la propriété et non dans le constructeur? On dirait qu'il est chargé dans le constructeur :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top