弹出窗口和 Window 的 AllowsTransparency
Popup and Window's AllowsTransparency
只要我在 Window 中将 AllowsTransparency
设置为 true 并关闭此 Window 前面的弹出窗口,Window 就不会重绘并且弹出窗口仍然显示在 Window.
之上
如果这个 Window 失去焦点或者如果我输入键盘的 "alt" 键,Window 会重新绘制并正确显示。
更清楚:
没有 AllowTransparency
显示的弹出窗口:
隐藏的弹出窗口:
使用 AllowTransparency
显示的弹出窗口:
隐藏的弹出窗口:
XAML:
<Window x:Class="Tests.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="1000"
WindowStyle="None"
AllowsTransparency="True">
<Grid>
<Rectangle Width="1000" Height="300" Fill="Red"></Rectangle>
<CheckBox x:Name="PopupCheckBox">
<TextBlock Text="Show popup"/>
</CheckBox>
<Popup IsOpen="{Binding ElementName=PopupCheckBox, Path=IsChecked}" Placement="Center">
<Rectangle Width="500" Height="500" Fill="Green" />
</Popup>
</Grid>
</Window>
我想知道这种行为的原因是什么以及如何 fix/bypass 它。
谢谢。
编辑
我尝试在弹出窗口的 Closed 事件的处理程序中调用 InvalidateVisual,但它没有改变行为:
public MainWindow()
{
InitializeComponent();
PopupTest.Closed += PopupTest_Closed;
}
void PopupTest_Closed(object sender, EventArgs e)
{
InvalidateVisual();
}
编辑 2
好的,显卡驱动程序似乎是导致此行为的原因。我将它更新到最新版本,虽然仍然显示工件,但它的行为有所不同(弹出窗口的显示区域小得多)。
关闭此线程。感谢大家。
我无法告诉您原因,但要解决此问题,请在关闭弹出窗口时在 window 上使用 InvalidateVisual 方法。
window.InvalidateVisual();
如问题的最新编辑所述,伪像是由过时的显卡驱动程序引起的。
只要我在 Window 中将 AllowsTransparency
设置为 true 并关闭此 Window 前面的弹出窗口,Window 就不会重绘并且弹出窗口仍然显示在 Window.
如果这个 Window 失去焦点或者如果我输入键盘的 "alt" 键,Window 会重新绘制并正确显示。
更清楚:
没有 AllowTransparency
显示的弹出窗口:
隐藏的弹出窗口:
使用 AllowTransparency
显示的弹出窗口:
隐藏的弹出窗口:
XAML:
<Window x:Class="Tests.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="1000"
WindowStyle="None"
AllowsTransparency="True">
<Grid>
<Rectangle Width="1000" Height="300" Fill="Red"></Rectangle>
<CheckBox x:Name="PopupCheckBox">
<TextBlock Text="Show popup"/>
</CheckBox>
<Popup IsOpen="{Binding ElementName=PopupCheckBox, Path=IsChecked}" Placement="Center">
<Rectangle Width="500" Height="500" Fill="Green" />
</Popup>
</Grid>
</Window>
我想知道这种行为的原因是什么以及如何 fix/bypass 它。
谢谢。
编辑
我尝试在弹出窗口的 Closed 事件的处理程序中调用 InvalidateVisual,但它没有改变行为:
public MainWindow()
{
InitializeComponent();
PopupTest.Closed += PopupTest_Closed;
}
void PopupTest_Closed(object sender, EventArgs e)
{
InvalidateVisual();
}
编辑 2
好的,显卡驱动程序似乎是导致此行为的原因。我将它更新到最新版本,虽然仍然显示工件,但它的行为有所不同(弹出窗口的显示区域小得多)。
关闭此线程。感谢大家。
我无法告诉您原因,但要解决此问题,请在关闭弹出窗口时在 window 上使用 InvalidateVisual 方法。
window.InvalidateVisual();
如问题的最新编辑所述,伪像是由过时的显卡驱动程序引起的。