调整大小时WPF窗口会闪烁

时间:2016-11-17 18:46:44

标签: c# wpf

我有一个非常简单的窗口,使用以下XAML定义(视图模型中当前没有逻辑):

<Window x:Class="WpfViewer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:WpfViewer"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Width="525"
        Height="350"
        d:DataContext="{d:DesignInstance local:MainWindowVm}"
        mc:Ignorable="d">
    <Grid Margin="8">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
            <ColumnDefinition Width="8" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0"
                    Grid.Column="0"
                    Grid.ColumnSpan="3"
                    Orientation="Horizontal" Margin="0,0,0,8">
            <TextBlock Text="Object" />
            <!--  breadcrumbs  -->
        </StackPanel>
        <Border Grid.Row="1"
                Grid.Column="0"
                BorderBrush="Black"
                BorderThickness="1" />
        <GridSplitter Grid.Row="1"
                      Grid.Column="1"
                      Width="8"
                      Background="{DynamicResource {x:Static SystemColors.WindowBrush}}"
                      ResizeBehavior="PreviousAndNext" />
        <Border Grid.Row="1"
                Grid.Column="2"
                BorderBrush="Black"
                BorderThickness="1" />
    </Grid>
</Window>

当用户调整窗口大小时,窗口的新区域会闪烁黑色。 enter image description here

有没有办法防止这种闪烁?

我不相信这个现有的问题是重复的。它涉及完全自定义窗口,带有动画。

Prevent WPF window flicker

4 个答案:

答案 0 :(得分:3)

我知道这很旧,但是正如公认的答案所暗示的,这是由于调试工具所致。如果您不使用或不依赖XAML的UI调试工具,就会发现其性能显着提高。

工具>选项>调试>常规>为XAML启用UI调试工具

当然,在调试器外部运行该应用程序应该向您显示该应用程序的 actual 性能。毫无疑问,使用任何IDE作为调试器运行程序都会大大降低其运行速度,这仅仅是调试器与程序交互,监视其所做的所有操作以及侦听异常等方式的结果。

答案 1 :(得分:2)

这是由添加到窗口的调试时间引起的。尝试在没有附加调试器的情况下运行它。

答案 2 :(得分:-1)

我遇到了同样的问题,但是我通过使用nuget包 edge.windowchrome Microsoft.Windows.Shell

的升级版来解决了

它帮助我消除了闪烁

注意:它只能在最新版本的Windows 10(红石版)中很好地工作

答案 3 :(得分:-1)

使用UWP Host可能会解决您的问题。

请参见以下示例屏幕截图:

Screenshot

您可以从此处删除完整的标题栏。在ShowTitlebar="false"中赋予属性mainwindow