2009-09-15 134 views
14

我在我的XAML中有一个Popup来显示一些信息。当弹出框时,它没有Border并且似乎融入页面的Background。它只需要一个Border,最好是在它后面的阴影显示某种分层和焦点。WPF弹出窗口:如何在弹出窗口周围添加边框?

任何想法如何设计一个Popup有边界和可能的阴影效果?

+3

你应该小心使用这些效果,大部分时间他们是sloooowwwwwww。 – 2009-09-15 14:54:19

回答

4

谢谢,我最终通过设置边框就像给它一个类似3D的(几乎)外观:

<Border BorderBrush="White" BorderThickness="3,3,0,0"> 
      <Border BorderBrush="Black" BorderThickness="1,1,3,3"> 
</Border> 
</Border> 

看起来相当不错!

10
<Popup PopupAttributes="SetByYou"> 
<Border BorderAttribute="SetByYou"> 
    <!-- Content here --> 
</Border> 
</Popup> 
4

显然弹出窗口当前不支持阴影,see link

但是,我想出了一个解决方法,这工作得很好国际海事组织。基本上这个想法是将一个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> 

的点要注意的是嵌套的画布需要比大小的它的容器小。 AllowsTransparency也必须设置。

+0

+1提醒我有关'AllowsTransparency' – quetzalcoatl 2013-08-26 09:01:17

25
在我看来

容易得多是把保证金周围的弹出边界足够大的DropShadowEffect,即

<Border ... Margin="0 0 8 8"> 
    <Border.Effect> 
     <DropShadowEffect ... /> 
    </Border.Effect> 
    <!-- Popup Content Here --> 
</Border> 

弹出式窗口应该允许透明度,即AllowsTransparency =真。

+0

我真的很困扰滴阴影的东西,这真的帮了我。添加保证金是一个很棒的主意! – Franchesca 2013-01-03 10:48:30

+0

该保证金为我工作完美!非常感谢 – Chris 2013-05-01 12:50:56

+0

这很明显,因为它在答案中,但弹出窗口中的AllowsTransparency =“True”是最重要的部分。如果你像我一样想念它,你会在你的弹出窗口周围留下一个黑色的边框。 – Brandon 2016-06-14 15:22:05