2009-04-30 13 views
9

Mam aplikację WPF, która ma siatkę danych innej firmy z obramowaniem wokół niego. Użyłem DropShadowEffect, aby umieścić cień za granicą, ale wydaje się to mieć wpływ na wydajność (nie tak bardzo jak BitmapEffect, ale nadal zauważalne) i sprawia, że ​​renderowanie czcionek jest niewyraźne. Czy istnieje sposób, aby jakoś zastosować efekt do granicy, ale nie jego zawartość?Jak zastosować efekt do obramowania, ale nie do jego zawartości w WPF?

Próbowałem ustawić efekt na zawartości na {x:Null}, ale to nie pomogło.

Oto przykładowa aplikacja, którą wymyśliłem. Umieszcza cień za granicą, ale także kładzie cień za każdą linią tekstu. Chcę cienia za granicą, ale nie tekstu.

<Window x:Class="WpfEffectTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <Border BorderBrush="Black" BorderThickness="10" CornerRadius="5" Margin="25"> 
      <Border.Effect> 
       <DropShadowEffect BlurRadius="10" ShadowDepth="5" /> 
      </Border.Effect> 
      <StackPanel> 
       <TextBlock>This is some text</TextBlock> 
       <TextBlock>This is some text</TextBlock> 
       <TextBlock>This is some text</TextBlock> 
       <TextBlock>This is some text</TextBlock> 
       <TextBlock>This is some text</TextBlock> 
       <TextBlock>This is some text</TextBlock> 
      </StackPanel> 
     </Border> 

    </Grid> 
</Window> 

Odpowiedz

12

Łącze z gcores miał odpowiedź, która jest postawić granicę i jego zawartość razem w tej samej sieci więc zawartość nakłada granicę.

<Window x:Class="WpfEffectTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <Border BorderBrush="Black" BorderThickness="10" CornerRadius="5" Margin="25"> 
      <Border.Effect> 
       <DropShadowEffect BlurRadius="10" ShadowDepth="5" /> 
      </Border.Effect> 
     </Border> 
     <StackPanel Margin="35"> 
      <TextBlock>This is some text</TextBlock> 
      <TextBlock>This is some text</TextBlock> 
      <TextBlock>This is some text</TextBlock> 
      <TextBlock>This is some text</TextBlock> 
      <TextBlock>This is some text</TextBlock> 
      <TextBlock>This is some text</TextBlock> 
     </StackPanel> 
    </Grid> 
</Window> 
4

Jeden prosty (Hack?) Rozwiązaniem jest zrobić

<StackPanel Background="White"> 

powinno rozwiązać ten tekst z problemem spadku cień (nie wiem o problemie wydajności chociaż). Problem polega na tym, że WPF stosuje efekty do elementu zestawu i wszystkich jego elementów potomnych w drzewie wizualnym. Ten link wyjaśnia to lepiej: DropShadowEffect performance issue

-1

Spróbuj kolejnym bloku (lub podobnych) dla wszystkich TextBlocks:

<TextBlock> 
    <TextBlock.Effect> 
     <DropShadowEffect BlurRadius="30" ShadowDepth="5" Color="White"/> 
    </TextBlock.Effect> 
</TextBlock> 
Powiązane problemy