2009-09-15 4 views
14

Mam Popup w moim XAML, aby wyświetlić niektóre informacje. Po wyskakującym okienku nie ma ono wartości Border i wydaje się wtapiać w stronę Background strony. To po prostu potrzebuje Border, a najlepiej cień za nim, aby pokazać jakiś rodzaj warstw i ostrości.Wyskakujące okno WPF: jak umieścić obramowanie wokół wyskakującego okienka?

Jakieś pomysły na styl wyskakującego, aby mieć ramkę i być może efekt cienia?

+3

powinieneś być ostrożny przy używaniu tych efektów, przez większość czasu są one sloooowwww. –

Odpowiedz

4

Dzięki, skończyło się nadając jej wygląd (prawie) jak 3D-ustawiając granicę jak:

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

Wygląda całkiem przyzwoity!

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

Podobno wyskakujące okienka nie obsługują obecnie cieni, see link.

Jednak wymyśliłem obejście tego, które działa dość dobrze IMO. Zasadniczo chodzi o to, aby płótno było zagnieżdżone w innym przezroczystym płótnie i po prostu zastosować cień do zagnieżdżonego płótna. Prosty. Herezje przykład:

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

punkty, aby pamiętać, że są zagnieżdżone płótno musi być mniejszy niż rozmiar To pojemnik. Należy również ustawić opcję Dopuszczalność przezroczystości.

+0

+1 za przypomnienie mi o "AllowsTransparency" – quetzalcoatl

25

Znacznie łatwiej moim zdaniem jest wprowadzenie marginesu wokół Popup Granicy wystarczająco duży dla DropShadowEffect, tj

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

kontekstowe powinny umożliwić przejrzystości, czyli AllowsTransparency = True.

+0

Naprawdę borykałem się z problemami z cieniami, a to naprawdę mi pomogło. Dodanie marginesu to świetny pomysł! – Franchesca

+0

Margines sprawdził się doskonale! Wielkie dzięki – Chris

+0

Jest to dość oczywiste, ponieważ jest w odpowiedzi, ale najważniejszą częścią jest "AllowsTransparency =" True ". Jeśli przegapisz to tak jak ja, po prostu dostaniesz grubą czarną obwódkę wokół twojego okna popup. – Brandon