WPF TreeView прыгает вокруг - PullRequest
       11

WPF TreeView прыгает вокруг

0 голосов
/ 23 марта 2011

У меня есть TreeView с несколькими сотнями листьев, организованных в несколько десятков узлов ... достаточно узлов, чтобы прокручивать их все.

Обычно все работает нормально, но когда развернутые узлы не все умещаются в ScrollViewer, нажатие на узел, чтобы развернуть его, также прокручивает весь TreeView вверх (скрывая только что развернутые листья, пока вы не прокрутите вниз вручную).

Это не та же проблема, что и WPF TreeView с IsVirtualizing = "true" скачет по кругу при смене фокуса и прокрутки , потому что a) я не настраиваю параметры панели стека актуализации; и б) Это .NET 4 (эта ссылка сообщает, что проблема относится только к 3.5).

<DataTemplate x:Key="QuestionTemplate">
    <Border BorderBrush="AliceBlue" BorderThickness="1">
        <HeaderedContentControl HeaderTemplate="{DynamicResource QuestionHeaderTemplate}" 
                  Header="{Binding NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" IsTabStop="False" HorizontalAlignment="Left" 
                  IsEnabled="True" />                        
    </Border>
</DataTemplate>
    <HierarchicalDataTemplate x:Key="GroupTemplate" ItemsSource="{Binding MyData, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, Mode=TwoWay}" 
                                          ItemTemplate="{StaticResource MyTemplate}">                
        <Border x:Name="GroupTemplateBorder" BorderBrush="AliceBlue" BorderThickness="1" CornerRadius="10">
        <HeaderedContentControl x:Name="GroupTemplateExpander" MinHeight="22" HeaderTemplate="{DynamicResource GroupHeaderTemplate}" Header="{Binding}" IsTabStop="False" 
            HorizontalAlignment="Left" VerticalContentAlignment="Center" IsEnabled="True" />                   
        </Border>
    </HierarchicalDataTemplate>

    <ScrollViewer HorizontalScrollBarVisibility="Auto">
    <Grid Name="gridPicker" Background="White" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
    <TreeView Name="treeView" MinHeight="20" ItemTemplate="{StaticResource GroupTemplate}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
        <TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="helper:TreeViewNoSelectBehavior.IsTransparent" Value="True" />
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>                
    </Grid>
    </ScrollViewer>

1 Ответ

1 голос
/ 23 марта 2011

Разве в древовидном представлении уже не определен вид прокрутки внутри шаблона управления? попробуйте удалить этот скроллвьюер и сетку и установить

<TreeView Name="treeView" Background="White" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MinHeight="20" ItemTemplate="{StaticResource GroupTemplate}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="helper:TreeViewNoSelectBehavior.IsTransparent" Value="True" />
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>             
...