2009-04-30 4 views
9

У меня есть приложение WPF, у которого есть сетка данных сторонних разработчиков с рамкой вокруг него. Я использовал DropShadowEffect, чтобы поместить тень за границу, но это, похоже, влияет на производительность несколько (не так много, как BitmapEffect, но все же заметно) и делает шрифт рендеринга нечетким. Есть ли способ каким-то образом применить эффект к границе, но не его содержимое?Как применить эффект к границе, но не к ее содержимому в WPF?

Я попытался установить Эффект на содержимое на {x:Null}, но это не помогло.

Вот пример приложения, в котором я придумал. Он помещает тень за границу, но также заслоняет тень за каждой строкой текста. Я хочу тень за границей, но не текст.

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

ответ

12

Связь с gcores был ответ, который должен поставить границу и его содержание вместе в одной и той же сетке, так что содержание перекрывает границу.

<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

Один простой (взломать?) Решение сделать

<StackPanel Background="White"> 

Это должно решить текст раскрывающихся теневой проблемы (не уверен о проблеме производительности, хотя). Проблема заключается в том, что WPF применяет эффекты к элементу set и всем его дочерним элементам в визуальном дереве. Эта ссылка объясняет это лучше: DropShadowEffect performance issue

-1

Попробуйте следующий блок (или аналогичный) для всех TextBlocks:

<TextBlock> 
    <TextBlock.Effect> 
     <DropShadowEffect BlurRadius="30" ShadowDepth="5" Color="White"/> 
    </TextBlock.Effect> 
</TextBlock> 
Смежные вопросы