WPF Popup UI показывает черный
Я использую элемент управления Popup WPF, и он показывает фон как черный. Я помещаю StackPanel внутри него с Background = "Transparent", но это не помогает.
<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>
Может кто-нибудь, пожалуйста, скажите мне, как сделать фоном на всплывающем окне прозрачным (или любым цветом)?
Ответы
Ответ 1
Вам нужно установить для свойства AllowsTransparency="True"
всплывающее свойство значение 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;
}
Ответ 2
Базовый цвет Popup
или Window
, если на то пошло, черный. Вы редко видите его для Window
, потому что Window
имеет свойство Background
, и по умолчанию он имеет сплошной цвет, но если вы установите Window.Background
на Transparent
, он также будет черным. Но Popup
не имеет свойства Background
, и поэтому, pardon pun, эта проблема "всплывает".
Если вы хотите, чтобы Popup
был прозрачным, вам нужно установить AllowsTransparency="True"
. Однако, если вы хотите, чтобы Popup
был сплошным цветом, самый простой способ - сделать дочерний элемент Popup
a Panel
, который поддерживает свойство Background
, и установить это свойство в желаемый цвет, а затем установите дочерний элемент Panel
в качестве содержимого, предназначенного для Popup
, в первую очередь. Я предлагаю Grid
, так как это не повлияет на расположение вашего Popup
. Это будет только эффект, который даст вам цвет фона, который вы желаете.
Ответ 3
Убедитесь, что разрешающая прозрачность установлена в значение true, вертикальные и горизонтальные выравнивания центрированы, а высота и ширина установлены на "Авто".
Например:
<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>
Ответ 4
Я предполагаю, что CircularProgressBar фактически вызывает черный фон. Единственный способ, которым это может случиться, - это создать стиль или что-то на одном из элементов управления (Popup или StackPanel или...).
Вот пример быстрого n-грязного, который показывает TextBlock во всплывающем окне, когда установлен флажок. Выбранные цвета предназначены только для того, чтобы убедиться, что все выглядит визуально:
<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>
Итак, два теста, которые вы можете сделать, чтобы определить, что происходит:
- Замените CircularProgressBar простым TextBlock или другим элементом управления, к которому у вас нет стиля.
- Поместите CircularProgressBar как автономный элемент управления где-нибудь в вашем окне или в противном случае пустое тестовое окно.
Ответ 5
В соответствии с этой статьей Почему мой WPF Popup черный и как я его правильно позиционирую?:
Вам нужно установить свойство AllowsTransparency в Popup равным True и установить свойства PlacementTarget и Placement для управления позицией всплывающего окна.
В соответствии с рассматриваемым кодом:
<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, в то время как вопроситель упомянул:
Привет Светлозар: Я пробовал это, но он не работа. Для меня, хотя я не, StackPanel вне всплывающего окна, но я есть StackPanel в Popup который содержит пару элементов управления над ним
Проблема может заключаться в том, что Popup не смог найти PlacementTarget 'parentStackPanel', потому что он не существует.
Ответ 6
Другая возможная причина:
- с использованием IsOpen = "True" в разметке до AllowTransparency = "True"
Переключение порядка исправляет его.
Ответ 7
Проблема заключается в том, что сетка не является ориентацией, размещающей ее вне всплывающего окна.
Удалите VerticalAlignment и horizontalAlignment со всех элементов управления внутри всплывающего окна, и оно будет работать правильно.
Ответ 8
Довольно старый, но может помочь кому-то: добавьте InitializeComponent();
в конструктор, он решил мою проблему:
class MyPopupClass : Popup {
/*
...
*/
public MyPopupClass () {
InitializeComponent();
/*
...
*/
}
/*
...
*/
}