WPF Element.Effect,停止影响子元素?

时间:2011-03-09 16:18:02

标签: wpf xaml graphics dropshadow

我已将效果应用于此模板的边框。然后效果会应用到其中的每个元素,因此我得到的阴影比我照顾的要多。有没有办法禁用这种效果?你可以看到我在其中添加了一个模糊效果,但最后我得到了模糊的阴影效果:)

DataTemplate  x:Key="TestInstanceViewModelTemplate">
    <Border BorderThickness="1" BorderBrush="#FF0909B4">
        <Border.Effect>
            <DropShadowEffect/>
        </Border.Effect>
        <DockPanel>
            <DockPanel.Effect>
                <BlurEffect/>
            </DockPanel.Effect>
            <Grid DockPanel.Dock="Top">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition MinWidth="50" Width="1*" />
                    <ColumnDefinition MinWidth="50" Width="1*"/>
                </Grid.ColumnDefinitions>
                <Button Command="{Binding Path=StartCommand}" Content="Start" Grid.Column="0" Grid.Row="0" />
                <Button Command="{Binding Path=StopCommand}" Content="Stop" Grid.Column="1" Grid.Row="0"/>
            </Grid>
            <WpfTestingClient:StatusControl DockPanel.Dock="Top" HorizontalAlignment="Stretch"></WpfTestingClient:StatusControl>
        </DockPanel>
    </Border>
</DataTemplate>

1 个答案:

答案 0 :(得分:6)

我建议将最顶层的容器更改为Grid并在其中包含Border和DockPanel在同一级别上,让Border位于底部并伸展以填充Grid,同时将DockPanel置于顶部并添加1px边距围绕它来解释你的BorderThickness。这样,不仅将阴影仅应用于Border元素,而且每次内部发生任何变化时都不必重新渲染效果,从而节省了大量资源。