2

所以我有一个像下面这样的组合框,编码如下;

AllowsTransparency="True" Background="Transparent">
        <Border CornerRadius="10" Background="Beige" BorderBrush="Aqua" BorderThickness="2">
            <Grid>
                <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
                    <Label Name="lblText"></Label>
                    <ComboBox Name="cbxNumbers"></ComboBox>
                    <TextBox Name="txtNumbers" Visibility="Collapsed"></TextBox>
                    <Button HorizontalAlignment="Center" Name="btnDone"
Click="btnDone_Click">That's Right!</Button>
                </StackPanel>
                <Button VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="1"
FontSize="8" Name="btnChangeInput" Click="btnChangeInput_Click">Let me chose the number
</Button>
            </Grid>
        </Border>

然后填充这样的代码;

lblText.Content = Text;
cbxNumbers.Items.Add(5);
cbxNumbers.Items.Add(10);
cbxNumbers.Items.Add(50);
cbxNumbers.Items.Add(100);
cbxNumbers.Items.Add(1000);
cbxNumbers.Items.Add(10000);
cbxNumbers.Items.Add(100000);
cbxNumbers.Items.Add(1000000);
cbxNumbers.SelectedIndex = 0;

我的问题很明显,为什么我的Dropdown展示在我的窗户下面?

组合框问题

更新

引用微软

感谢您报告此问题。尽管此问题正在调查中,但我们可能在 .NET 4.0 中没有可用的修复程序。当我们能够在未来的版本中修复该问题时,我们将再次更新此错误。谢谢!

太好了……有什么解决办法吗?

4

1 回答 1

3

这是一个有据可查的错误AllowTransparency=TRUE。它只发生在某些运行 Win XP 的计算机上。

http://connect.microsoft.com/VisualStudio/feedback/details/465964/wpf-combobox-dropdown-list-appears-behind-the-form-when-allowstransparency-true

在这里找到一种解决方法:

如前所述,这是 XP 上分层窗口的问题。在 WPF 级别上没有太多可以解决这个问题的方法,并且鉴于 XP 不再提供服务,这不太可能得到修复。不过,您可以使用一些潜在的解决方法。

问题的根源在于,当 WindowStyle=None 和 AllowsTransparency=True 时,WPF 使用了称为“分层 Windows”的东西。这样做的原因通常是为了实现自定义窗口镶边。最近 WPF 团队发布了一个库,允许您在不借助分层窗口的情况下获得自定义 chrome。该库可在

http://code.msdn.microsoft.com/WPFShell

这不支持每像素不透明度,但它允许完全自定义渲染窗口,包括通常由系统管理的区域。它可以让您设置窗户角的半径,但不是完全任意的形状。如果你可以使用这个库而不是 AllowsTransparency=True 那么它应该可以解决这个问题。

Microsoft 已经发布了一个hotfix,但似乎并没有修复与该问题相关的所有问题。

于 2012-06-28T15:44:44.040 回答