我使用以下控件模板
<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会正确显示。
我做错了什么?
答案 0 :(得分:0)
在您的模板中,您尚未指定TargetType
的显示方式和位置。
一旦您决定在标签中显示标题,您需要
将控制模板的GroupBox
设置为GroupBox
。这将确保<Label Content = "{TemplateBinding Header}">
属性的TemplateBinding有效。
您必须像这样执行TemplateBinding
JHTML::_('behavior.formvalidator');
答案 1 :(得分:0)
自己解决了问题。
代码本身存在结构性问题。我定义了两个GroupBox。一个在模板中,一个在代码隐藏之外。
修改代码隐藏中的外部GroupBox的Header也不反映UI,但是修改了模板DID中定义的内部。
无论如何,我必须在这里重新考虑我的设计。