显示黑色的WPFpopup式UI

我正在使用WPF Popup控件,并将背景显示为黑色。 我把一个StackPanel里面的背景=“透明”,但这并没有帮助。

<Popup PlacementTarget="{Binding ElementName=parentStackPanel}" Placement="Center" IsOpen="False" Name="m_popWaitNotifier" PopupAnimation="None" AllowsTransparency="False"> <StackPanel Orientation="Vertical" Background="Transparent"> <uc:CircularProgressBar x:Name="CB" StartupDelay="0" RotationsPerMinute="20" Height="25" Foreground="White" Margin="12"/> </StackPanel> </Popup> 

有人可以告诉我如何使背景popup透明(或任何颜色)?

您需要将AllowsTransparency="True" Popup属性设置为True

这里是一个例子:

 <Grid> <StackPanel> <Button Click="Button_Click" Width="100" Height="20" Content="Click" /> <Popup x:Name="popup" Width="100" Height="100" AllowsTransparency="True"> <Grid Background="Transparent"> <TextBlock Text="Some Text" /> </Grid> </Popup> </StackPanel> </Grid> 

和点击处理程序

 private void Button_Click(object sender, RoutedEventArgs e) { popup.Visibility = System.Windows.Visibility.Visible; popup.IsOpen = true; } 

Popup的基本颜色或者Window就是黑色的。 你很less看到它的Window因为Window有一个Background属性,它默认为纯色,但如果您将Window.Background设置为Transparent它也将是黑色的。 但Popup没有Background属性,所以请原谅,这个问题“popup来”。

如果你想让Popup透明,你需要设置AllowsTransparency="True" 。 但是,如果要使Popup成为纯色,最简单的方法是使Popup的子项成为支持Background属性的Panel ,并将该属性设置为所需的颜色,然后将Panel的子项设置为您首先想要的Popup内容。 我build议Grid因为它不会影响你的Popup的布局。 这只是为了给你你想要的背景颜色。

确保允许透明度设置为true,垂直和水平alignment居中,高度和宽度设置为“自动”。

例如:

 <Popup Name="popup1" Placement="Top" PlacementTarget="{Binding ElementName=button2}" AllowsTransparency="True" Height="Auto" Width="Auto" Panel.ZIndex="1" HorizontalOffset="-5" HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel Height="92" HorizontalAlignment="Left" Margin="93,522,0,0" Name="stackPanelPop" VerticalAlignment="Top" Width="147"> </StackPanel> </Popup> 

我的猜测是CircularProgressBar实际上是导致黑色的背景。 唯一可能发生的另一种方式是,如果在某个控件(Popup或者StackPanel或者…)上有一个Style或者其他东西的话。

这里是一个快速的肮脏的例子,当一个checkbox被选中时,popup一个TextBlock。 select的颜色只是为了确保事物的视觉突出:

 <StackPanel x:Name="stackPanelLayout"> <StackPanel.Background> <RadialGradientBrush Center="0.75, 0.75" SpreadMethod="Reflect"> <GradientStop Color="LightBlue" Offset="0" /> <GradientStop Color="SeaGreen" Offset="0.5" /> <GradientStop Color="MidnightBlue" Offset="0.75" /> </RadialGradientBrush> </StackPanel.Background> <CheckBox x:Name="chkShowPopup" FontSize="20" Foreground="White" Content="Show Popup" /> <Popup PlacementTarget="{Binding ElementName=stackPanelLayout}" Placement="Center" IsOpen="{Binding ElementName=chkShowPopup, Path=IsChecked}" Name="m_popWaitNotifier" PopupAnimation="Slide" AllowsTransparency="True"> <StackPanel Orientation="Vertical" Background="Transparent"> <TextBlock Foreground="White" FontSize="30" FontWeight="Bold" Text="PopUp" /> </StackPanel> </Popup> </StackPanel> 

所以,你可以做两个testing来确定发生了什么事情:

  1. 将CircularProgressBarreplace为一个简单的TextBlock或其他没有适用于Style的控件。
  2. 把CircularProgressBar作为一个独立的控件放在窗口的某个地方,或者放在一个空白的testing窗口上。

按照这篇文章为什么是我的WPFpopup黑色,我怎么得到它定位正确? :
您需要将Popup上的AllowsTransparency属性设置为True,并设置PlacementTarget和Placement属性来控制Popup打开的位置。

按照有关的代码:

 <Popup PlacementTarget="{Binding ElementName=parentStackPanel}" Placement="Center" IsOpen="False" Name="m_popWaitNotifier" PopupAnimation="None" AllowsTransparency="False"> <StackPanel Orientation="Vertical" Background="Transparent"> <uc:CircularProgressBar x:Name="CB" StartupDelay="0" RotationsPerMinute="20" Height="25" Foreground="White" Margin="12"/> </StackPanel> </Popup> 

PlacementTarget设置为parentStackPanel,而提问者提到:

嗨Svetlozar:我尝试过,但不起作用。 对我来说,虽然我没有一个StackPanel 之外的Popup,但我有一个StackPanel内的Popup持有一些控制它

问题可能在于Popup 找不到 PlacementTarget的“parentStackPanel”,因为它不存在。

另一个可能原因:

  • 在AllowTransparency =“True”之前在标记中使用IsOpen =“True”

切换订单修复它。

问题是网格不是定位的,它在popup窗口之外。 从popup窗口中的所有控件中删除VerticalAlignment和horizo​​ntalAlignment,它将正常工作

相当古老,但可能有助于某人:添加InitializeComponent(); 在构造函数中,它解决了我的问题:

 class MyPopupClass : Popup { /* ... */ public MyPopupClass () { InitializeComponent(); /* ... */ } /* ... */ }