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には、子の周りに描画する必要のあるシャドウがあります。

悪い良い

element考えられる解決策の1つは、適切な変換を使用して、半径と原点/中心をプロパティにバインドしてグラデーションを生成することですchildが、このようなアプローチはかなり複雑でコストがかかります。

4

1 に答える 1

0

最後に、バインディングとコンバーターの代わりに、子要素のバックグラウンドTransformationを作成し、依存関係プロパティを介して公開することでエレガントに解決できたことを除いて、変換されたグラデーション ルートを使用しました。ArrangeOverrideActualは、型が一致する祖先を検索することによってRadialGradientBrush、そのオブジェクトをバインドします。TransformBackgroundTransform

これは、私の場合は真である子クラスを変更/ラップできることを前提としています。添付されたプロパティともう少し作業を行うことで、より柔軟にすることができます。

実際のコードはこの要点にあります。

于 2013-02-14T15:38:32.670 に答える