2009-09-15 172 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