在XAML中设置ContentControl的背景颜色

时间:2013-04-26 10:23:12

标签: wpf xaml contentcontrol

对于我的生活,我似乎无法弄清楚设置ContentControl的背景颜色这个简单的任务:

<ContentControl x:Name="Content03"
            Width="130"
            Height="130"
            Canvas.Top="50"
            Canvas.Left="400"
            Background="Yellow">
        <Ellipse Fill="YellowGreen" IsHitTestVisible="True">
        </Ellipse>
    </ContentControl>

还尝试使用样式执行此操作但仍然无效;(

3 个答案:

答案 0 :(得分:6)

ContentControl本身没有视觉效果,但它是子控件的容器。在这个控件上设置一些属性(比如fontsize等)通常只是让这些属性沿着可视化树传播的一种方式,所以它们可以被子控件(支持它的那些)接收。

最好的办法是:

<ContentControl x:Name="Content03"
            Width="130"
            Height="130"
            Canvas.Top="50"
            Canvas.Left="400">
        <Grid Background="Yellow">
        <Ellipse Fill="YellowGreen" IsHitTestVisible="True">
        </Ellipse>
        </Grid>
    </ContentControl>

答案 1 :(得分:1)

如果您不必坚持使用ContentControl,我建议使用Border。

当我遇到同样的问题时,Border具有相同的Child属性,我只需要一个孩子,并通过不同对象的代码轻松切换它。 Border正确使用像背景这样的属性。如果Child为null,那些属性也可以工作。

<Border x:Name      = "Content03"
        Width       = "130"
        Height      = "130"
        Canvas.Top  = "50"
        Canvas.Left = "400"
        Background  = "Yellow">

    <Ellipse 
        Fill             = "YellowGreen" 
        IsHitTestVisible = "True">
    </Ellipse>

</Border>

答案 2 :(得分:0)

我知道这已经过时但您也可以在样式中更改ContentControl的模板。对于某些事情来说这可能有些过分,但在这种情况下,它实际上只是将一个ContentPresenter包装在一个Border和一些模板绑定中:

    <Style TargetType="ContentControl" x:Key="StPortal">
        <Setter Property="Background" Value="White" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContentControl">
                    <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" 
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <ContentPresenter />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

这使您能够设置边框具有的背景等属性,并且可以设置ContentControl具有的字体系列和大小等内容,而Border则不... ...