WPF Element.Effect, прекратить затрагивать дочерние элементы? - PullRequest
1 голос
/ 09 марта 2011

Я применил эффект к границе этого шаблона.Затем эффект применяется к каждому элементу внутри, поэтому я получаю больше теней, чем мне нужно.Есть ли способ отключить эффект?Вы можете видеть, что я добавил эффект размытия внутри, но тогда я просто получаю размытые тени:)

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 Ответ

6 голосов
/ 09 марта 2011

Я предлагаю изменить самый верхний контейнер на Grid, в котором ваши Border и DockPanel должны находиться на одном уровне, позволяя Border находиться снизу и растягиваясь, чтобы заполнить Grid, при этом DockPanel сверху и добавление поля в 1px вокруг него, чтобы объяснить вашу BorderThickness. Таким образом, тень не только будет применяться только к элементу Border, но вы сохраняете МНОГО ресурсов, не меняя эффект каждый раз, когда что-то меняется внутри.

...