Почему 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, не находятся в последовательности вкладок и не будут сообщаться при тестировании попаданий.
возможно проблема в том, что обратите внимание на сам графический интерфейс. Вы выполняете какую-либо фоновую операцию?