0

我认为执行以下操作可能很常见:

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

    <SomeControl/>
</Grid>

好吧,我在没有 ide 帮助的情况下做到了这一点,如果我忘记了什么,我承认我已经迷失了,但我认为你明白了。

我的问题是,是否可以创建一个允许我这样做的 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 回答