web-dev-qa-db-ja.com

黒を表示するWPFポップアップUI

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の背景を透明(または任意の色)にする方法を教えてください。

51
P N

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;
}
75

Popup、またはWindowの基本色は黒です。 WindowにはWindowプロパティがあり、デフォルトで単色に設定されているため、Backgroundにはほとんど表示されませんが、Window.BackgroundTransparentまた、黒になります。ただし、PopupにはBackgroundプロパティがないため、この問題は「ポップアップ」します。

Popupを透明にする場合は、AllowsTransparency="True"を設定する必要があります。ただし、Popupを無地にしたい場合、最も簡単な方法は、Popupの子をPanelをサポートするBackgroundにすることです。プロパティを設定し、そのプロパティを希望の色に設定してから、Panelの子を、最初にPopupに対して意図したコンテンツに設定します。 Gridのレイアウトには影響しないので、Popupをお勧めします。それはあなたが望む背景色を与えることだけの効果です。

13
Rick Sladkey

透明を許可が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>
10
Zengineer

別の考えられる原因:

  • allowTransparency = "True"の前にマークアップでIsOpen = "True"を使用する

順序を切り替えると修正されます。

4
Rob Relyea

私の推測では、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つのテスト:

  1. CircularProgressBarを、スタイルが適用されていない単純なTextBlockまたはその他のコントロールに置き換えます。
  2. CircularProgressBarをスタンドアロンコントロールとしてウィンドウのどこか、または空のテストウィンドウに配置します。
3
Wonko the Sane

この記事のとおり 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'を見つけられなかったことです。

2
publicgk

かなり古いですが、誰かを助けるかもしれません:コンストラクタにInitializeComponent();を追加して、私の問題を解決しました:

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

問題は、グリッドの向きがポップアップの外側に配置されないことです。ポップアップ内のすべてのコントロールからVerticalAlignmentとhorizo​​ntalAlignmentを削除すると、正しく機能します

0