WPFポップアップコントロールを使用していますが、背景が黒で表示されています。 Background = "Transparent"で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
の基本色は黒です。 Window
にはWindow
プロパティがあり、デフォルトで単色に設定されているため、Background
にはほとんど表示されませんが、Window.Background
をTransparent
また、黒になります。ただし、Popup
にはBackground
プロパティがないため、この問題は「ポップアップ」します。
Popup
を透明にする場合は、AllowsTransparency="True"
を設定する必要があります。ただし、Popup
を無地にしたい場合、最も簡単な方法は、Popup
の子をPanel
をサポートするBackground
にすることです。プロパティを設定し、そのプロパティを希望の色に設定してから、Panel
の子を、最初にPopup
に対して意図したコンテンツに設定します。 Grid
のレイアウトには影響しないので、Popup
をお勧めします。それはあなたが望む背景色を与えることだけの効果です。
透明を許可が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>
別の考えられる原因:
順序を切り替えると修正されます。
私の推測では、CircularProgressBarが実際に黒の背景を引き起こしています。これが発生する可能性がある唯一の他の方法は、コントロール(PopupまたはStackPanelまたは...)のいずれかにスタイルまたは何かが設定されている場合です。
チェックボックスがオンになっているときにポップアップでTextBlockを表示するクイックnダーティの例を次に示します。選択した色は、視覚的に目立つようにするためのものです。
<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>
したがって、何が起こっているのかを判断するために行うことができる2つのテスト:
この記事のとおり WPF Popupが黒いのはなぜですか、どうすれば適切に配置できますか? :
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:私はこれを試しましたが、うまくいきません。私にとっては、私はないStackPaneloutsidePopupを持っていますが、 Popup内にStackPanelがあり、いくつかのコントロールを保持しています
問題は、Popupが存在しないためPlacementTarget 'parentStackPanel'を見つけられなかったことです。
かなり古いですが、誰かを助けるかもしれません:コンストラクタにInitializeComponent();
を追加して、私の問題を解決しました:
class MyPopupClass : Popup {
/*
...
*/
public MyPopupClass () {
InitializeComponent();
/*
...
*/
}
/*
...
*/
}
問題は、グリッドの向きがポップアップの外側に配置されないことです。ポップアップ内のすべてのコントロールからVerticalAlignmentとhorizontalAlignmentを削除すると、正しく機能します