В моем проекте я создал элемент управления, который наследуется от 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 #?
Заранее спасибо.