2

假设有一个形状不规则的元素由任意嵌套的其他元素组成:

<Window.Resources>
  <RadialGradientBrush x:Key="brush">
    <GradientStop Color="Black" Offset="0" />
    <GradientStop Color="White" Offset="1" />
  </RadialGradientBrush>
</Window.Resources>

<StackPanel Name="element">
  <StackPanel.Effect>
    <DropShadowEffect ShadowDepth="0" BlurRadius="10" />
  </StackPanel.Effect>
  <Rectangle Name="child1" Height="100" Margin="10" Stroke="Black" Fill="{StaticResource brush}" />
  <Grid>
    <Rectangle Name="child2" Height="100" Margin="10" Stroke="Black" Fill="{StaticResource brush}" />
  </Grid>
</StackPanel>

所有部分都是交互式的(即一个孩子可以是一个真正的控制)。

如何使用跨越所有孩子的单个径向渐变填充孩子的背景(应该看起来好像它的大小为element)。

更新: StackPanel 有一个阴影,应该在孩子周围绘制。

坏的好的

一种可能的解决方案是通过适当的转换生成 Radius 和 Origin/Center 绑定到element's 和child' 属性的渐变,但这种方法会相当复杂和昂贵。

4

1 回答 1

0

最后,我使用了转换后的渐变路线,除了绑定和转换器之外,我能够通过TransformationArrangeOverride子元素中创建背景并通过依赖属性公开它来优雅地解决它。实际通过搜索具有匹配类型的祖先来RadialGradientBrush绑定它。TransformBackgroundTransform

这假设一个人可以修改/包装子类,这在我的情况下是正确的。它可以通过附加的属性和更多的工作变得更加灵活。

实际代码在这个 gist中。

于 2013-02-14T15:38:32.670 回答