Dropshadow UserControl

时间:2013-01-27 14:13:20

标签: wpf controls

我认为做以下事情可能很常见:

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

    <SomeControl/>
</Grid>

好的,我没有借助于我无可比拟的遗嘱这样做,如果我忘记了某些事情,我会原谅我,但我认为你明白了。

我的问题是,是否可以创建一个允许我这样做的UserControl:

<DropShadowBorder>
    <SomeControl/>
</DropShadowBorder>

如果是,请告诉我们如何。

编辑:以防万一它不是很明显,这里的重点是我通常会在我的控件周围放一个边框但是当我想使用一个投影我不能,因为我只想让边框有一滴阴影而不是其中的一切。因此,我必须在相同的网格空间中单独创建边框,但这很烦人,因为当我调整边距时,我必须在边框上重复这些更改。

1 个答案:

答案 0 :(得分: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>