WPF Popup: как поставить рамку вокруг всплывающего окна? - PullRequest
14 голосов
/ 15 сентября 2009

В моем XAML есть Popup, чтобы показать некоторую информацию. Когда всплывающее окно появляется, оно не имеет Border и, по-видимому, сливается с Background страницы. Ему просто нужно Border, а в идеале - тень позади него, чтобы показать какое-то наслоение и фокус.

Есть идеи, как оформить всплывающее окно, чтобы оно имело границы и, возможно, эффект тени?

Ответы [ 4 ]

26 голосов
/ 15 сентября 2010

Гораздо проще, на мой взгляд, разместить поле вокруг всплывающей границы, достаточно большое для DropShadowEffect, т.е.

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

Всплывающее окно должно разрешать прозрачность, то есть AllowsTransparency = True.

10 голосов
/ 15 сентября 2009
<Popup PopupAttributes="SetByYou">
 <Border BorderAttribute="SetByYou">
  <!-- Content here -->
 </Border>
</Popup>
4 голосов
/ 13 июля 2010

Видимо, всплывающие окна в настоящее время не поддерживают тени, см. Ссылку .

Тем не менее, я нашел обходной путь, который работает довольно хорошо, 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>

Следует отметить, что вложенный холст должен быть меньше, чем размер его контейнера. Также необходимо установить AllowsTransparency.

4 голосов
/ 17 сентября 2009

Спасибо, в итоге я придал ему трехмерный (едва ли) вид, установив границу как:

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

Выглядит довольно прилично!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...