0
我对WPF来说绝对是新手。我无法弄清楚为什么VirtualizingStackPanel不能用于以下工作。我已经用ScrollViewer进行了实验,但它不适用于我。我曾尝试将VirtualizingStackPanel放在每个地方,但似乎根本没有任何影响。组合框填充3000项目时,每个项目都有16x16图像,需要大约30秒才能显示。所以任何帮助将不胜感激。VirtualizingStackPanel对ComboBox不起作用
更新:DataTemplate中已添加
<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>