2009-09-15 22 views
14

Ich habe eine Popup in meinem XAML, um einige Informationen anzuzeigen. Wenn die Box erscheint, hat sie keine Border und scheint in die Background der Seite überzugehen. Es braucht nur eine Border, und idealerweise einen Schlagschatten dahinter, um eine Art von Schichtung und Fokus zu zeigen.WPF-Popup: Wie wird ein Rahmen um das Popup gelegt?

Irgendwelche Ideen, wie man ein Popup stylt, um eine Grenze und möglicherweise den Schatteneffekt zu haben?

+3

Sie sollten vorsichtig sein mit diesen Effekten, die meiste Zeit sind sie sloooowwww. –

Antwort

4

Dank, landete ich es ein 3D-like (kaum) Aussehen wie durch Einstellen der Grenze Aufgeben:

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

Sieht recht gut!

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

Offenbar unterstützen Popups zur Zeit keine Schlagschatten, see link.

Allerdings habe ich mir eine Workaround einfallen lassen, die IMO ziemlich gut funktioniert. Grundsätzlich besteht die Idee darin, einen Canvas-Bereich innerhalb eines anderen transparenten Canvas-Bereichs zu verschachteln und den Schlagschatten auf den geschachtelten Canvas-Bereich anzuwenden. Einfach. Heres ein Beispiel:

 <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> 

Die Punkte sind zu beachten, dass die verschachtelte Leinwand kleiner sein muss als die Größe des Behälters es ist. Auch muss AllowsTransparency eingestellt werden.

+0

+1 für die Erinnerung an 'AllowsTransparency' – quetzalcoatl

25

Viel einfacher ist meiner Meinung nach ein Rand um das Popup-Border groß genug für die DropShadowEffect setzen, das heißt

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

Die Popup Transparenz ermöglichen sollte, ist, dass AllowsTransparency = True.

+0

Ich hatte wirklich Probleme mit dem Dropshadow-Zeug, und das hat mir wirklich geholfen. Hinzufügen der Marge ist eine tolle Idee! – Franchesca

+0

Der Rand arbeitete perfekt für mich! Vielen Dank – Chris

+0

Dies ist ziemlich offensichtlich, weil es in der Antwort ist, aber die 'AllowsTransparency = "True" 'auf dem Popup ist der wichtigste Teil. Wenn Sie es so vermissen wie ich, werden Sie nur einen dicken schwarzen Rand um Ihr Popup bekommen. – Brandon

Verwandte Themen