我正在尝试构建一个带有透明窗口的 Windows 11 应用程序。我通过设置 AllowsTransparency=True 和 WindowStyle=None 实现了透明窗口。但是当我调整到左侧时,
我正在尝试构建一个带有透明窗口的 Windows 11 应用程序。我通过设置 AllowsTransparency=True 和 WindowStyle=None 实现了透明窗口。但是当我将窗口大小调整到左侧时,窗口会闪烁。 中也有与闪烁问题相关的类似问题。它们大多数都是针对 win32 的,或者没有提供合适的解决方案,或者某些 API 可能现在不受支持。我理解这本身就是 Windows 框架的限制。所以,我尝试使用 windowchrome 属性。我在 windowchrome 属性中设置了 NonClientFrameEdges=Left。它适用于 Windows 10。Windows 10 中没有闪烁。但在 Windows 11 中,透明度完全消失了,出现了白色背景。这个问题甚至存在于 WinUI3 中。我认为它非常明显,对用户来说体验并不好。有什么方法可以减少或消除这种闪烁吗?
我已经回答过这些问题, 从左侧调整窗口大小时窗口闪烁的 questions 如何在调整窗口大小时平滑难看的抖动/闪烁/跳跃,尤其是拖动左/上边框(Win 7-10;bg、bitblt 和 DWM)? https://github.com/microsoft/microsoft-ui-xaml/issues/5148
我希望 WPF 透明窗口在向左调整大小时不会闪烁。我正在使用 .net8。
我创建了一个WPF项目。项目中的MainWindow.xaml的代码示例如下:
<Window x:Class="BlurWindow.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BlurWindow"
mc:Ignorable="d"
AllowsTransparency="True"
WindowStyle="None"
Background="#1f010100"
BorderBrush="White"
BorderThickness="2"
Title="MainWindow" Height="450" Width="800">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="32"/>
</WindowChrome.WindowChrome>
<Border x:Name="MainWindowBorder" Background="Transparent">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Background="White" Grid.Row="0">
<StackPanel
HorizontalAlignment="Left"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock FontFamily="Arial"
Text="Sample App"/>
</StackPanel>
</Grid>
</Grid>
</Border>
</Window>