12

我有一个 WPF 应用程序,它有一个带有边框的 3rd 方数据网格。我已经使用了DropShadowEffect在边框后面放置阴影,但这似乎会在一定程度上影响性能(几乎没有 a 影响BitmapEffect,但仍然很明显)并使字体渲染变得模糊。有没有办法以某种方式将效果应用于边框,而不是其内容?

我尝试将内容上的效果设置为{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>
4

3 回答 3

19

来自 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>
于 2009-04-30T17:39:14.600 回答
4

一个简单的(黑客?)解决方案是

<StackPanel Background="White">

这应该解决带有阴影问题的文本(虽然不确定性能问题)。问题是 WPF 将效果应用于 set 元素及其在可视树中的所有子元素。这个链接解释得更好: DropShadowEffect 性能问题

于 2009-04-30T16:12:49.237 回答
-2

为所有 TextBlocks 尝试以下块(或类似块):

<TextBlock>
    <TextBlock.Effect>
        <DropShadowEffect BlurRadius="30" ShadowDepth="5" Color="White"/>
    </TextBlock.Effect>
</TextBlock>
于 2016-05-27T08:03:09.997 回答