2013-02-13 81 views
1

假设有不规则形状,任意嵌套其他元素构成的元素渐变画笔:WPF跨越多个元件

<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有一个阴影,应该围绕儿童绘制。

goodbad

一种可能的解决方案是产生具有半径和产地/中心梯度势必element的和child的属性用合适的转换,但这样的方法将是相当复杂和昂贵。

+0

你可以让实际控制​​自己“透明”,并把它们放在背景上吗? – CodingGorilla 2013-02-13 17:33:18

+0

你是什么意思?也许提供一个例子。 – 2013-02-13 17:35:20

+0

所以你可以用你的渐变背景创建一个'DockPanel',然后把你的控件放到'DockPanel'中(像儿童一样)。 – CodingGorilla 2013-02-13 17:36:31

回答

0

最后,我去转换渐变路线,除了代替绑定和转换器我能够通过在子元素的ArrangeOverride中创建背景Transformation并通过依赖属性公开它来优雅地解决它。 实际RadialGradientBrush通过搜索具有匹配类型的祖先来将其Transform绑定到BackgroundTransform

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

实际代码在this gist