WPF Popup:如何在弹出窗口周围放置边框?

Sha*_*que 14 wpf styles popup

Popup在我的XAML中有一个显示一些信息.弹出框时,它没有Border,似乎Background与页面混合.它只需要一个Border,理想情况下它背后的阴影,以显示某种分层和焦点.

任何想法如何设置Popup的边框和可能的阴影效果?

小智 26

在我看来,更简单的是在Popup Border周围留下足够大的余量用于DropShadowEffect,即

<Border ... Margin="0 0 8 8">
    <Border.Effect>
        <DropShadowEffect ... />
    </Border.Effect>
    <!-- Popup Content Here -->
</Border>
Run Code Online (Sandbox Code Playgroud)

Popup应该允许透明度,即allowsTransparency = True.

  • 这很明显,因为它在答案中,但弹出窗口中的 `AllowsTransparency="True"` 是最重要的部分。如果你像我一样错过了它,你的弹出窗口周围会出现一个粗黑的边框。 (2认同)

Ran*_*pho 10

<Popup PopupAttributes="SetByYou">
 <Border BorderAttribute="SetByYou">
  <!-- Content here -->
 </Border>
</Popup>
Run Code Online (Sandbox Code Playgroud)


HAd*_*des 5

显然,弹出窗口目前不支持投影,请参见link

但是,我想出了一种解决方法,该方法在IMO上效果很好。基本上,这个想法是让一个Canvas嵌套在另一个透明的Canvas中,然后将阴影应用于嵌套的Canvas。简单。这里是一个例子:

        <Grid>
        <TextBox x:Name="MyTxtBx" Width="50" 
                 Height="20" Text="Hello"/>
        <Popup IsOpen="True" Width="200" Height="100" 
               PlacementTarget="{Binding ElementName=MyTxtBx}" 
               AllowsTransparency="True" >
            <Canvas Background="Transparent">
                <Canvas Background="Green" Width="150" Height="50">
                    <Canvas.BitmapEffect>
                        <DropShadowBitmapEffect Softness=".5" 
                                                ShadowDepth="5" 
                                                Color="Black"/>
                    </Canvas.BitmapEffect>
                    <Label Content="THIS IS A POPUP TEST"/>
                </Canvas>
            </Canvas>
        </Popup>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

需要注意的一点是,嵌套的画布需要小于其容器的大小。还必须设置AllowsTransparency。


Sha*_*que 4

谢谢,我最终通过将边框设置为类似 3D 的(几乎)外观:

 <Border BorderBrush="White" BorderThickness="3,3,0,0">
            <Border BorderBrush="Black" BorderThickness="1,1,3,3">
</Border>
</Border>
Run Code Online (Sandbox Code Playgroud)

看起来相当不错!