Нежелательная прокрутка при нажатии на последний элемент в ItemsControl - PullRequest
2 голосов
/ 28 февраля 2012

Case: ItemsControl с включенной виртуализацией (производительность).Содержит флажки / текстовые поля / и т. Д.Однако, если щелкнуть флажок / текстовое поле на последнем видимом элементе, элемент управления прокрутится вниз вместо выбора флажка / текстового поля.С отключенной виртуализацией все работает нормально ... Я много чего перепробовал (используя ListView, оборачивая его в большую панель и т. Д.).Не повезло.

ItemsSource установлен в коде для большого набора данных тестовых элементов со свойствами Name и ID.

<Window x:Class="ListViewTestApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="650" Width="525" Background="AliceBlue">

<ItemsControl x:Name="MainListView" VirtualizingStackPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid DataContext="{Binding}" Width="525">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Label Height="50" Grid.Row="0" Content="{Binding Path=Name}"/>
                <CheckBox Height="50" Content="Checkbox" Grid.Row="1" />
                <TextBox Height="50" Grid.Row="2" />
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Template>
        <ControlTemplate>
            <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}"
        BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True">
                <ScrollViewer Padding="{TemplateBinding Control.Padding}" Focusable="False">
                    <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
                </ScrollViewer>
            </Border>
        </ControlTemplate>
    </ItemsControl.Template>
</ItemsControl>

...