tags:

views:

20

answers:

2

This is my combobox. It doesn't seem to be virtualizing, but I cannot figure out why. Do you know of anything that would cause this?

<ComboBox Grid.Row="0" Grid.Column="2" 
    SelectedValuePath="PrimaryKey" 
    SelectedValue="{Binding CustomerKey}" 
    ItemsSource="{Binding CustomerCanidates}">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>
A: 

Try setting this property too:

<ComboBox VirtualizingStackPanel.IsVirtualizing="True"
Carlo
Alas that didn't change it.
Jonathan Allen
Hmm that is weird. This has always worked for me in TreeViews and ListViews / Boxes. Never tried it on ComboBoxes but i don't see why it would not work.
Carlo
Turns out it is something in the style sheet. I will update my question shortly.
Jonathan Allen
A: 

Check the styles applied to the control. For example, the "Shiny Blue" style from Microsoft is defined as such:

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}">
    <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}"/>
</ControlTemplate>


<Style TargetType="{x:Type ComboBox}">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="Template" Value="{DynamicResource ComboBoxTemplate}" />
</Style>

<ControlTemplate x:Key="ComboBoxTemplate" TargetType="{x:Type ComboBox}">
    <Grid>
        <ToggleButton Grid.Column="2" Template="{DynamicResource ComboBoxToggleButton}" x:Name="ToggleButton" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"/>
        <ContentPresenter HorizontalAlignment="Left" Margin="3,3,23,3" x:Name="ContentSite" VerticalAlignment="Center" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" IsHitTestVisible="False"/>

        <TextBox Visibility="Hidden" Template="{DynamicResource ComboBoxTextBox}" HorizontalAlignment="Left" Margin="3,3,23,3" x:Name="PART_EditableTextBox" Style="{x:Null}" VerticalAlignment="Center" Focusable="True" Background="Transparent" IsReadOnly="{TemplateBinding IsReadOnly}"/>

        <Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide">
            <Grid MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True">
                <Border x:Name="DropDownBorder" Background="{DynamicResource ShadeBrush}" BorderBrush="{DynamicResource SolidBorderBrush}" BorderThickness="1"/>
                <ScrollViewer Margin="4,6,4,6"   SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True">

                    <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"/>

                </ScrollViewer>
            </Grid>
        </Popup>
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="HasItems" Value="false">
            <Setter Property="MinHeight" Value="95" TargetName="DropDownBorder"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/>
        </Trigger>
        <Trigger Property="IsGrouping" Value="true">
            <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
        </Trigger>
        <Trigger Property="AllowsTransparency" SourceName="Popup" Value="true">
            <Setter Property="Margin" Value="0,0,0,0" TargetName="DropDownBorder"/>
            <Setter Property="CornerRadius" TargetName="DropDownBorder" Value="3,3,3,3"/>
        </Trigger>
        <Trigger Property="IsEditable" Value="true">
            <Setter Property="IsTabStop" Value="false"/>
            <Setter Property="Visibility" Value="Visible" TargetName="PART_EditableTextBox"/>
            <Setter Property="Visibility" Value="Hidden" TargetName="ContentSite"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

Merely changing it from a StackPanel to a VirtualizingStackPanel fixed my problem.

Jonathan Allen