显示黑色的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来确定发生了什么事情:
- 将CircularProgressBarreplace为一个简单的TextBlock或其他没有适用于Style的控件。
- 把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和horizontalAlignment,它将正常工作
相当古老,但可能有助于某人:添加InitializeComponent();
在构造函数中,它解决了我的问题:
class MyPopupClass : Popup { /* ... */ public MyPopupClass () { InitializeComponent(); /* ... */ } /* ... */ }