首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dropshadow UserControl

Dropshadow UserControl
EN

Stack Overflow用户
提问于 2013-01-27 22:13:20
回答 1查看 1.5K关注 0票数 0

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

代码语言:javascript
复制
<Grid>
    <Border>
        <Border.Effect>
            <DropShadowEffect/>
        </Border.Effect>
    </Border>

    <SomeControl/>
</Grid>

好吧,我是在没有ide的帮助下做到这一点的,我承认我在没有ide的情况下迷失了,所以如果我忘记了什么,请原谅我,但我想你明白这一点。

我的问题是,有没有可能创建一个允许我这样做的UserControl:

代码语言:javascript
复制
<DropShadowBorder>
    <SomeControl/>
</DropShadowBorder>

如果是这样的话,请告诉我是怎么做的。

编辑:如果不是很明显,这里的要点是我通常会在我的控件周围放置一个边框,但当我想使用投影时,我不能这样做,因为我只想让边框有一个投影,而不是其中的所有内容。因此,我不得不在相同的网格空间中单独创建边框,但这很烦人,因为当我在我的控件上调整边距等时,我每次都必须在边框上复制这些更改。

EN

回答 1

Stack Overflow用户

发布于 2013-01-27 22:16:42

你不能做用户控件(用户控件不能有内容)。您必须创建自定义控件。我建议您创建一个从ContentControl派生的自定义控件。

自定义控件的代码(默认代码!):

代码语言:javascript
复制
public class DropShadowBorder : ContentControl
{
    static DropShadowBorder()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(DropShadowBorder), new FrameworkPropertyMetadata(typeof(DropShadowBorder)));
    }
}

然后定义控件的默认样式(在generic.xaml中)

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14548227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档