应用ControlTemplate时无法设置GroupBox的标头

时间:2015-08-03 14:29:56

标签: c# wpf

我使用以下控件模板

<ControlTemplate x:Key="CriterionTemplate" Name="CriterionTemplate">    
    <GroupBox Name="CriterionGroupbox">
        <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="20"/>
            <ColumnDefinition Width="50"/>
        </Grid.ColumnDefinitions>

        <Button x:Name="KeywordSelectionButton"  Grid.Column="0" Height="50" IsManipulationEnabled="True" Style="{StaticResource HiddenButtonStyle}">
            <DockPanel HorizontalAlignment="Left" Width="{TemplateBinding ActualWidth}">
            <Image Name="SelectionImage" HorizontalAlignment="Left" Height="50"/>
            <Label Name="SelectionLabel" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="11" FontFamily="Comic Sans MS"/>
            </DockPanel>
        </Button>
        <Button x:Name="ClearButton"  Grid.Column="2" Height="50"/>
        </Grid>
    </GroupBox>
</ControlTemplate>

在我的MainWindow代码中,我动态创建了具有此模板的可变数量的控件

var template = this.FindResource("CriterionTemplate") as ControlTemplate;
GroupBox gb = new GroupBox()
{
    Template = template,
    Header = "MyCustomHeader",
};
gb.ApplyTemplate();

我创建了一堆这些组框并将它们添加到某个stackpanel。到现在为止还挺好。 现在的问题是,未设置组框的标头属性。它只是空白。使用模板的groupbox看起来很完美,只是Header是空的。删除模板后,Header会正确显示。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

在您的模板中,您尚未指定TargetType的显示方式和位置。

一旦您决定在标签中显示标题,您需要

  1. 将控制模板的GroupBox设置为GroupBox。这将确保<Label Content = "{TemplateBinding Header}">属性的TemplateBinding有效。

  2. 您必须像这样执行TemplateBinding

    JHTML::_('behavior.formvalidator');

答案 1 :(得分:0)

自己解决了问题。

代码本身存在结构性问题。我定义了两个GroupBox。一个在模板中,一个在代码隐藏之外。

修改代码隐藏中的外部GroupBox的Header也不反映UI,但是修改了模板DID中定义的内部。

无论如何,我必须在这里重新考虑我的设计。