Сетка ColumnDefinition.Width в DataTemplate - PullRequest
1 голос
/ 05 ноября 2011

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

Заранее спасибо.

1 Ответ

1 голос
/ 05 ноября 2011

Эта часть работает, возможно, это не то, что вы хотите, я полагаю. Попробуйте удалить его, и результат должен быть другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...