在我的项目中,我创建了一个继承自Control
的控件。它被称为DialogHeader
,正如其名称所示,用于在模态,不可调整大小的对话框上显示标题。实际上,它默认绑定到其父Window
。该控件具有一个名为IconLocation
的属性,即图像是否应显示在控件标签的左侧或右侧:
[Image] [Label] -- or -- [Label] [Image]
DialogHeader
使用的模板基本上如下:
<ControlTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="COLN_Left" Width="auto" />
<ColumnDefinition Width="auto" />
<ColumnDefinition x:Name="COLN_Right" Width="*" />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Name="PART_Image" />
<Separator Grid.Column="1"
Visibility="Collapsed" Width="{TemplateBinding SpacerWidth}" />
<TextBlock Grid.Column="2" Name="PART_Text" />
</Grid>
<ControlTemplare.Triggers>
<Trigger Property="ImageLocation" Value="Right">
<Setter TargetName="PART_Image" Property="Grid.Column" Value="2" />
<Setter TargetName="PART_Text" Property="Grid.Column" Value="0" />
<!-- The following doesn't work! Help! -->
<Setter TargetName="COLN_Left" Property="Width" Value="*" />
<Setter TargetName="COLN_Right" Property="Width" Value="auto" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
简单地说,当ImageLocation
属性设置为Location.Right
时,应交换COLN_Left
和COLN_Right
的宽度。因此,我应该[auto][auto][*]
而不是[*][auto][auto]
。
如何从ControlTemplate
开始这项工作?如果没有,是否有办法不涉及使用C#代码?
提前谢谢。
答案 0 :(得分:1)
那部分确实有效,它可能不是你想要的假设。尝试删除它,结果应该是不同的。