WPF XAML在ContentControl中显示内容

时间:2014-08-26 14:58:50

标签: c# wpf xaml templates

我需要在一个正方形中显示一个数字,水平和垂直居中。

当我试图为此目的使用标签时,它似乎完全忽略了中心。因此,我决定使用网格并在网格上显示标签,因为它完美居中。

我需要使用模板,因为有几个主题可用。从我在互联网上发现的,我想到了这一点(暂时忽略了中心)

<ControlTemplate x:Key="ClockTemplate">
    <Grid>
        <Grid.Style>
            <Style TargetType="Grid">
                <Setter Property="Background" Value="White"/>
            </Style>
        </Grid.Style>
        <Label>
            <Label.Style>
                <Style TargetType="Label">
                    <Setter Property="Foreground" Value="#376092"/>
                </Style>
            </Label.Style>
            <ContentPresenter/>
        </Label>
    </Grid>
</ControlTemplate>

是正确的。使用方法如下:

<ContentControl  Content="20" Height="64" Width="64" Template="{DynamicResource ClockTemplate}"/>

内容没有显示,我做错了什么?另外,有没有更好的方法来实现我的目标?

1 个答案:

答案 0 :(得分:2)

根据我的理解,这不是正确的方法。如下所示,您必须为控件编写ControlTemplate,而不是创建Style,如果可能,也请使用StaticResource绑定。它比Dynamic绑定更快。请注意,我没有在Label内提及ControlTemplate尺寸。请根据您的需要进行

<Style x:Key="ContentControlStyle"
           TargetType="ContentControl">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContentControl">
                    <Grid Background="White">
                        <Label Foreground="#376092"
                               Width="200"
                               Height="100" Content="{TemplateBinding Content}">
                        </Label>
                    </Grid>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

将您的ContentControl与新创建的Style绑定,如下所示

<ContentControl Style="{StaticResource ContentControlStyle} ">

如果您的要求只是在ContentControl中设置了一些值,请改用Label并更改Style的{​​{1}}。因为Label很重