假设有一个由具有任意嵌套的其他元素组成的不规则形状的元素:
<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
和child
属性的渐变,但这种方法相当复杂且昂贵。
答案 0 :(得分:0)
最后,我使用转换渐变路径,除了绑定和转换器之外,我通过在子元素的Transformation
中创建背景ArrangeOverride
并通过依赖属性公开它来优雅地解决它。
实际RadialGradientBrush
通过搜索匹配类型的祖先将其Transform
绑定到BackgroundTransform
。
这假设可以修改/包装子类,这在我的情况下是正确的。它可以通过附加属性和更多工作变得更加灵活。
实际代码位于this gist。