GridSplitter движется очень медленно - PullRequest
0 голосов
/ 29 марта 2012

У меня есть проблема: после создания этого окна откройте все вложенные расширители с правой стороны.(их 7)Последний содержит несколько элементов. (TextBoxes) Попробуйте перетащить GridSplitter.Все хорошо, работает бегло.НО!Как только я нажимаю на один из текстовых полей (независимо от того, какой именно), перетаскивание становится безумно медленным (после падения мыши иногда 3 секунды +).После щелчка в TextBox эти выходные сообщения появляются в выводе:

'WpfApplication1.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\PresentationCore.resources\3.0.0.0_de_31bf3856ad364e35\PresentationCore.resources.dll'
'WpfApplication1.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\UIAutomationTypes\3.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.

После этого происходит безумное медленное перетаскивание.В окне отладки при паузе и переходе к следующему шагу отображаются следующие сообщения:

'WpfApplication1.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\PresentationCore.resources\3.0.0.0_de_31bf3856ad364e35\PresentationCore.resources.dll'
'WpfApplication1.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\UIAutomationTypes\3.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'MS.Internal.UIElementHelper.InvalidateAutomationAncestors'
Step into: Stepping over non-user code 'System.Windows.UIElement.Measure'
Step into: Stepping over non-user code 'MS.Internal.Helper.MeasureElementWithSingleChild'
Step into: Stepping over non-user code 'System.Windows.Controls.ScrollContentPresenter.MeasureOverride'
Step into: Stepping over non-user code 'System.Windows.FrameworkElement.MeasureCore'
Step into: Stepping over non-user code 'System.Windows.UIElement.Measure'
Step into: Stepping over non-user code 'System.Windows.Controls.Grid.MeasureCellsGroup'
Step into: Stepping over non-user code 'System.Windows.Controls.Grid.MeasureOverride'
Step into: Stepping over non-user code 'System.Windows.FrameworkElement.MeasureCore'
Step into: Stepping over non-user code 'System.Windows.UIElement.Measure'
Step into: Stepping over non-user code 'System.Windows.Controls.ScrollViewer.MeasureOverride'
Step into: Stepping over non-user code 'System.Windows.FrameworkElement.MeasureCore'
Step into: Stepping over non-user code 'System.Windows.UIElement.Measure'
Step into: Stepping over non-user code 'Microsoft.Windows.Themes.ClassicBorderDecorator.MeasureOverride'
Step into: Stepping over non-user code 'System.Windows.FrameworkElement.MeasureCore'
Step into: Stepping over non-user code 'System.Windows.UIElement.Measure'
Step into: Stepping over non-user code 'System.Windows.Controls.Control.MeasureOverride'
Step into: Stepping over non-user code 'System.Windows.Controls.TextBox.MeasureOverride'
Step into: Stepping over non-user code 'System.Windows.FrameworkElement.MeasureCore'
Step into: Stepping over non-user code 'System.Windows.UIElement.Measure'
Step into: Stepping over non-user code 'System.Windows.Controls.WrapPanel.MeasureOverride'

и т. Д.

ЭТО КОД: (не судите о качестве, этопросто тест, пожалуйста)

<Window Title="Window 5" x:Class="WpfApplication1.Window5" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <Grid Grid.Row="0" Grid.Column="0">
            <Grid.ColumnDefinitions>                
                <ColumnDefinition Width="*" />                
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />                
            </Grid.RowDefinitions>
            <Expander Grid.Row="0" Grid.Column="0" IsTabStop="False">
                <Expander.Header>
                    <DockPanel>
                        <TextBlock DockPanel.Dock="Left" Text="Search:" Margin="0,0,3,0" VerticalAlignment="Center" />
                        <Button DockPanel.Dock="Right" Margin="3,0,0,0" IsTabStop="False">
                            <Button.Style>
                                <Style TargetType="Button">
                                </Style>
                            </Button.Style>
                        </Button>
                        <Button DockPanel.Dock="Right" Margin="3" Content="_Search..." ToolTip="Tooltip search" IsTabStop="False" />
                        <TextBox DockPanel.Dock="Left" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="3" MinWidth="200" TabIndex="1">
                        </TextBox>
                    </DockPanel>
                </Expander.Header>
                <Expander.Content>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <TextBlock Grid.Row="0" Grid.Column="0" Text="Criteria 1:" VerticalAlignment="Center" HorizontalAlignment="Right" />
                        <TextBox Grid.Row="0" Grid.Column="1" />
                        <TextBlock Grid.Row="0" Grid.Column="2" Text="Criteria 1:" VerticalAlignment="Center" HorizontalAlignment="Right" />
                        <TextBox Grid.Row="0" Grid.Column="3" />

                        <TextBlock Grid.Row="1" Grid.Column="0" Text="Criteria 2:" VerticalAlignment="Center" HorizontalAlignment="Right" />
                        <TextBox Grid.Row="1" Grid.Column="1" />
                        <TextBlock Grid.Row="1" Grid.Column="2" Text="Criteria 2:" VerticalAlignment="Center" HorizontalAlignment="Right" />
                        <TextBox Grid.Row="1" Grid.Column="3" />
                    </Grid>
                </Expander.Content>
            </Expander>
        </Grid>

        <Border Grid.Row="1" Grid.Column="0" BorderThickness="1" CornerRadius="4">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>

                <TextBlock Grid.Row="0" Grid.Column="0" Text="Found Matches..." FontStyle="Italic" Panel.ZIndex="100">
                    <TextBlock.Style>
                        <Style TargetType="TextBlock">
                            <Setter Property="Visibility" Value="Visible" />                       
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
                <ListBox Grid.Row="0" Grid.Column="0" TabIndex="2">
                    <ListBox.Style>
                        <Style TargetType="ListBox">
                            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
                            <Setter Property="BorderThickness" Value="0" />
                            <Setter Property="Margin" Value="0,7,0,7" />
                        </Style>
                    </ListBox.Style>
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="ListBoxItem">
                            <Setter Property="SnapsToDevicePixels" Value="true" />
                            <Setter Property="OverridesDefaultStyle" Value="true" />
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="ListBoxItem">
                                        <Border Margin="4,0,0,0" CornerRadius="6,0,0,6" SnapsToDevicePixels="true" Background="Transparent">
                                            <Grid>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="*" />
                                                    <ColumnDefinition Width="Auto" />
                                                </Grid.ColumnDefinitions>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto" />
                                                </Grid.RowDefinitions>
                                                <ContentPresenter Grid.Column="0" />
                                                <Border Padding="10,0,10,0" CornerRadius="4" Grid.Column="1">
                                                    <Path Width="13.2457" Height="12.8151" Stretch="Fill" Data="F1 M 78.1398,324.18L 52.5865,298.626C 51.6892,297.728 50.3385,297.459 49.1678,297.946C 47.9971,298.43 47.2305,299.574 47.2305,300.843L 60.6385,326.398L 47.2305,351.952C 47.2305,353.223 47.9971,354.364 49.1678,354.848C 49.5558,355.011 49.9638,355.09 50.3678,355.09C 51.1838,355.09 51.9852,354.77 52.5865,354.171L 78.1398,328.616C 78.7238,328.032 79.0598,327.224 79.0598,326.398C 79.0598,325.572 78.7238,324.764 78.1398,324.18 Z ">
                                                        <Path.Style>
                                                            <Style TargetType="Path">
                                                                <Setter Property="Fill" Value="#FF000000" />
                                                            </Style>
                                                        </Path.Style>
                                                    </Path>
                                                    <Border.Style>
                                                        <Style TargetType="Border">
                                                            <Setter Property="Visibility" Value="Visible" />
                                                            <Setter Property="Background" Value="Transparent" />
                                                        </Style>
                                                    </Border.Style>
                                                </Border>
                                            </Grid>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </ListBox.ItemContainerStyle>
                </ListBox>

                <GridSplitter Grid.Row="0" Grid.Column="1" Focusable="False" HorizontalAlignment="Right" ResizeDirection="Columns" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch">
                    <GridSplitter.Style>
                        <Style TargetType="GridSplitter">
                            <Setter Property="IsEnabled" Value="True" />
                            <Setter Property="Width" Value="10" />
                        </Style>
                    </GridSplitter.Style>
                </GridSplitter>

                <Border Grid.Row="0" Grid.Column="2" BorderThickness="0,2,2,2" CornerRadius="0,4,4,0">
                    <ScrollViewer>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>

                            <Button Grid.Row="0" Grid.Column="0" Content="Edit" HorizontalAlignment="Right" Margin="0,5,5,0" TabIndex="3">
                                <Button.Style>
                                    <Style TargetType="Button">
                                        <Setter Property="Focusable" Value="True" />
                                    </Style>
                                </Button.Style>
                            </Button>

                            <Expander Grid.Row="1" Grid.Column="0">
                                <Expander>
                                    <Expander>
                                        <Expander>
                                            <Expander>
                                                <Expander>
                                                    <Expander>
                                                        <Grid>
                                                            <Grid.ColumnDefinitions>
                                                                <ColumnDefinition Width="*" />                                                               
                                                            </Grid.ColumnDefinitions>
                                                            <Grid.RowDefinitions>
                                                                <RowDefinition Height="Auto" />
                                                                <RowDefinition Height="Auto" />
                                                                <RowDefinition Height="Auto" />                                                                
                                                            </Grid.RowDefinitions>

                                                            <Grid Grid.Row="0" Grid.Column="0" >
                                                                <Grid.ColumnDefinitions>
                                                                    <ColumnDefinition Width="Auto" />
                                                                    <ColumnDefinition Width="*" />
                                                                </Grid.ColumnDefinitions>
                                                                <Grid.RowDefinitions>
                                                                    <RowDefinition Height="Auto" />
                                                                </Grid.RowDefinitions>

                                                                <Path Grid.Row="0" Grid.Column="0" Margin="5" />
                                                                <TextBlock Grid.Row="0" Grid.Column="1" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Left" TextAlignment="Left" />

                                                            </Grid>

                                                            <WrapPanel Grid.Row="2" Grid.Column="0"  Orientation="Horizontal">

                                                                <Grid Margin="5">
                                                                    <Grid.RowDefinitions>
                                                                        <RowDefinition Height="Auto" />
                                                                    </Grid.RowDefinitions>
                                                                    <Grid.ColumnDefinitions>
                                                                        <ColumnDefinition Width="*" />
                                                                        <ColumnDefinition Width="*" />
                                                                    </Grid.ColumnDefinitions>

                                                                </Grid>

                                                                <Grid Margin="5">
                                                                    <Grid.RowDefinitions>
                                                                        <RowDefinition Height="Auto" />
                                                                    </Grid.RowDefinitions>
                                                                    <Grid.ColumnDefinitions>
                                                                        <ColumnDefinition Width="*" />
                                                                        <ColumnDefinition Width="*" />
                                                                    </Grid.ColumnDefinitions>

                                                                </Grid>

                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBox />
                                                                <TextBlock Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="4" Text="Mega Text String Lorem ipsum et asdf asdf adsf asdf asdString Lorem ipsum et asdf asdf adsf asdf asdString Lorem ipsum et asdf asdf adsf asdf asd " FontSize="28" VerticalAlignment="Center" TextWrapping="Wrap" />

                                                            </WrapPanel>
                                                        </Grid>
                                                    </Expander>
                                                </Expander>
                                            </Expander>
                                        </Expander>
                                    </Expander>
                                </Expander>
                            </Expander>

                        </Grid>
                    </ScrollViewer>
                </Border>

            </Grid>
        </Border>
    </Grid>
</Window>

1 Ответ

1 голос
/ 29 марта 2012

Я скопировал ваш код ... и приложение работает быстро, и я могу плавно и без проблем перемещать GridSplitter, фокусируясь на одном из TextBox -Элементов.

Возможно, вам следует запуститьприложение в режиме без отладки.

...