Почему WPF отображает свернутые или скрытые элементы управления?

Я тестирую свое приложение WPF. У меня есть проблемы с производительностью в этом проекте.

Почему WPF отображает свернутые или скрытые элементы управления?

Использование ЦП не изменится, если я сверну или видимые элементы управления.

пример:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Height="30">
        <Button Content="visible" Margin="5" Padding="5,0,5,0" Click="Button_Click"/>
        <Button Content="hidden" Margin="5" Padding="5,0,5,0" Click="Button_Click_1"/>
        <Button Content="collapsed" Margin="5" Padding="5,0,5,0" Click="Button_Click_2"/>
    </StackPanel>
    <StackPanel Grid.Row="1" x:Name="renderStack">
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
        <ProgressBar Height="30" IsIndeterminate="True"/>
    </StackPanel>
</Grid>

Код позади:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        renderStack.Visibility = System.Windows.Visibility.Visible;
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        renderStack.Visibility = System.Windows.Visibility.Hidden;
    }

    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        renderStack.Visibility = System.Windows.Visibility.Collapsed;
    }

2 ответа

Я знаю, что это старо, но на всякий случай кто-нибудь придет посмотреть. Я обнаружил, что даже при том, что объект скрыт в большей степени, с помощью индикатора выполнения, когда установлено неопределенное, все равно будет работать процессор, пока он скрыт или свернут, так как он все еще воспроизводит анимацию. Попробуйте использовать. IsIndeterminate = False одновременно с его скрытием или свертыванием, и вы увидите падение использования процессора.

Ссылаясь на MSDN

Элементы, в которых видимость не видна, не участвуют во входных событиях (или командах), не влияют ни на этапы компоновки Measure, ни на Arrange, не находятся в последовательности вкладок и не будут сообщаться при тестировании попаданий.

возможно проблема в том, что обратите внимание на сам графический интерфейс. Вы выполняете какую-либо фоновую операцию?

Другие вопросы по тегам