0

次のことを行うことは、おそらくかなり一般的だと思います。

<Grid>
    <Border>
        <Border.Effect>
            <DropShadowEffect/>
        </Border.Effect>
    </Border>

    <SomeControl/>
</Grid>

わかりました、私は確かに失われているアイデアの助けなしにそれをしました。何かを忘れていたら許してください。

私の質問は、代わりにこれを可能にする UserControl を作成することは可能でしょうか?

<DropShadowBorder>
    <SomeControl/>
</DropShadowBorder>

もしそうなら、方法を教えてください。

編集:すぐに明らかではない場合に備えて、ここでのポイントは、通常はコントロールの周りに境界線を配置することですが、ドロップ シャドウを使用したい場合は、境界線にドロップ シャドウを持たせたいだけでなく、その中のすべて。代わりに、同じグリッド スペースで境界線を個別に作成する必要がありますが、コントロールで余白などを調整するときに、境界線で毎回それらの変更を複製する必要があるため、これは面倒です。

4

1 に答える 1

0

ユーザー コントロールを実行することはできません (ユーザー コントロールにコンテンツを含めることはできません)。カスタム コントロールを作成する必要があります。から派生したカスタム コントロールを作成することをお勧めしますContentControl

カスタム コントロールのコード (デフォルト コード!):

public class DropShadowBorder : ContentControl
{
    static DropShadowBorder()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(DropShadowBorder), new FrameworkPropertyMetadata(typeof(DropShadowBorder)));
    }
}

次に、コントロールのデフォルト スタイルを定義します ( generic.xaml) 。

<Style TargetType="{x:Type local:DropShadowBorder}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:DropShadowBorder}">
                <Grid>
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Border.Effect>
                            <DropShadowEffect />
                        </Border.Effect>
                    </Border>

                    <ContentPresenter Content="{TemplateBinding Content}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2013-01-27T14:16:41.527 に答える