Wie kann ich einen Effekt auf eine Grenze gelten, aber nicht, um seinen Inhalt in WPF?

StackOverflow https://stackoverflow.com/questions/807420

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe eine WPF-Anwendung, die einen 3rd-Party-Datenraster mit einem Rahmen um es hat. Ich habe die DropShadowEffect zu setzen einen Schatten hinter der Grenze verwendet, aber dies scheint die Leistung zu beeinflussen etwas (nicht annähernd so viel wie ein BitmapEffect, aber immer noch spürbar) und macht die Schrift unscharf macht. Gibt es eine Möglichkeit, die Wirkung auf die Grenze zu irgendwie gelten, nicht aber ihr Inhalt?

Ich habe versucht, die Effekteinstellung auf die Inhalte {x:Null}, aber das hat nicht geholfen.

Hier ist eine Beispielanwendung kam ich mit. Es setzt einen Schatten hinter der Grenze, aber es bringt auch einen Schatten hinter jeder Textzeile. Ich will den Schatten hinter der Grenze, aber nicht der Text.

<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>
War es hilfreich?

Lösung

Die Verbindung von gcores hatte die Antwort, die die Grenze und dessen Inhalt zusammen im gleichen Raster zu setzen ist, so dass die Inhalte, die Grenze überlagern.

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

Andere Tipps

Ein einfaches (Hack?) Lösung zu tun ist,

<StackPanel Background="White">

Dies sollte den Text mit Schlagschatten Problem (nicht sicher über das Leistungsproblem obwohl) lösen. Das Problem ist, dass WPF Effekte auf das eingestellte Element und alle gilt es Kinder in der visuellen Struktur. Dieser Link erklärt es besser: DropShadowEffect Leistungsproblem

Versuchen Sie, den folgenden Block (oder ähnlich) für alle Textblocks:

<TextBlock>
    <TextBlock.Effect>
        <DropShadowEffect BlurRadius="30" ShadowDepth="5" Color="White"/>
    </TextBlock.Effect>
</TextBlock>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top