2011-03-23 72 views
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> 

回答

1

该物业为你的形象 - 你说得那么当你访问属性它创建的图像,而不是在构造函数?这听起来像它是在构造函数中加载:)