2013-02-13 5 views
1

Предположим, что существует элемент с неправильной формы, состоящий из других элементов с произвольной вложенности:МОФ градиента кисти, которая охватывает несколько элементов

<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 есть тень, которую нужно нарисовать вокруг детей.

badgood

Одним из возможных решений является создание градиентов с радиусом и происхождения/Центр, связанные с element х и child 'свойств с соответствующими преобразований, но такой подход был бы довольно сложным и дорогим.

+0

Можете ли вы сами контролировать элементы управления «Прозрачный» и помещать их на задний план? – CodingGorilla

+0

Что значит? Может быть, пример. –

+0

Итак, вы можете создать «DockPanel» с вашим градиентным фоном, а затем поместить свои элементы управления в «DockPanel» (как дети). – CodingGorilla

ответ

0

Наконец, я пошел с измененным маршрутом градиентов, за исключением вместо привязок и конвертеров, я смог изящно решить его, создав фоновый Transformation в ArrangeOverride дочерних элементах и ​​разоблачая его через свойство зависимостей. Фактический RadialGradientBrush связывает его Transform с BackgroundTransform путем поиска предка соответствующего типа.

Предполагается, что можно модифицировать/переносить дочерние классы, которые истинны в моем случае. Его можно сделать более гибким с прикрепленными свойствами и немного больше работы.

Фактический код - this gist.