【发布时间】:2015-08-09 06:28:23
【问题描述】:
我正在测试我的 WPF 应用程序。我在这个项目中遇到了性能问题。
为什么 WPF 会呈现折叠或隐藏控件?
如果我折叠或显示控件,我的 CPU 使用率不会改变。
示例:
<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;
}
【问题讨论】:
-
您是否尝试过将
IsEnabled也设置为false?这应该更有效地阻止项目使用 CPU。您的真实案例涉及多少项目? -
是测试 renderStack.IsEnabled = false;并且不工作... CPU 使用率没有改变
-
IsEnabled 通常不会改变控件的处理能力。 (取决于实现)如果您真的想让框架忽略您的控件,您应该将它们从树中删除,并在需要时将它们添加回来。
-
是的,如果我从 StackPanel 删除控制。 cpu 使用率改为低...这是个好主意吗?有更好的方法吗?