2009-09-15 4 views
14

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

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

+3

вы должны быть осторожны при использовании этих эффектов, большую часть времени они sloooowwww. –

ответ

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 вложен в другой прозрачный холст и просто применил тень к вложенному холсту. Просто. Вот пример:

 <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

25

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

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

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

+0

. Я действительно борется с вещами, и это действительно помогло мне. Добавление маржи - потрясающая идея! – Franchesca

+0

Край отлично работал для меня! Большое спасибо – Chris

+0

Это довольно очевидно, потому что это ответ, но 'AllowsTransparency =" True "' на всплывающем окне является самой важной частью. Если вы пропустите его, как я, вы просто получите толстую черную рамку вокруг вашего всплывающего окна. – Brandon

Смежные вопросы