为什么WPF渲染折叠或隐藏控件?

时间:2015-05-27 09:07:58

标签: c# wpf render cpu-usage

我正在测试我的WPF Application.i这个项目的性能有问题。

为什么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;
    }

2 个答案:

答案 0 :(得分:2)

我知道这是旧的,但万一有人来看。我发现即使对象被隐藏得更加如此,进度条设置为不确定时仍然会在处理隐藏或折叠时处理器,因为它仍在渲染动画。尝试使用.IsIndeterminate = False同时隐藏或折叠它,你应该看到cpu use drop。

答案 1 :(得分:0)

参考MSDN

  

可见性不可见的元素不参与输入   事件(或命令),不影响测量或排列   布局的传递,不在标签序列中,也不会报告   在热门测试中。

也许问题是注意GUI本身。你在执行任何后台操作吗?