Popup WPF: come mettere un bordo attorno al popup?
Domanda
Ho un Popup
nel mio XAML per mostrare alcune informazioni. Quando viene visualizzata la finestra, non ha Border
e sembra fondersi con lo Background
della pagina. Ha solo bisogno di un Border
, e idealmente un'ombra dietro di esso per mostrare una sorta di stratificazione e messa a fuoco.
Qualche idea su come modellare un Popup in modo che abbia un bordo e possibilmente l'effetto ombra?
Soluzione 3
Grazie, ho finito per dargli un aspetto 3D (quasi) impostando il bordo come:
<Border BorderBrush="White" BorderThickness="3,3,0,0">
<Border BorderBrush="Black" BorderThickness="1,1,3,3">
</Border>
</Border>
Sembra abbastanza decente!
Altri suggerimenti
Molto più facile secondo me è mettere un margine attorno al Popup Border abbastanza grande per DropShadowEffect, cioè
<Border ... Margin="0 0 8 8">
<Border.Effect>
<DropShadowEffect ... />
</Border.Effect>
<!-- Popup Content Here -->
</Border>
Il popup dovrebbe consentire la trasparenza, ovvero AllowsTransparency = True.
<Popup PopupAttributes="SetByYou">
<Border BorderAttribute="SetByYou">
<!-- Content here -->
</Border>
</Popup>
Apparentemente i popup attualmente non supportano le ombre discendenti, vedi link .
Tuttavia, ho escogitato una soluzione alternativa che funziona piuttosto bene IMO. Fondamentalmente l'idea è di avere una tela nidificata all'interno di un'altra tela trasparente e applicare solo l'ombra esterna alla tela nidificata. Semplice. Ecco un esempio:
<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>
I punti da notare sono che la tela nidificata deve essere più piccola della dimensione del suo contenitore. Inoltre, è necessario impostare anche AllowsTransparency.