Невозможно привязать свойство одного элемента управления в DataTrigger к другому элементу управления в разных сетках.

В этом примере у меня есть два элемента управления, но в реальном приложении у меня гораздо больше, в зависимости от значения свойства «Содержимое метки в сетке» (например), некоторые другие метки, текстовые поля, текстовые блоки и кнопки будут видны или свернуты. в сетке два (например).

Но чтобы упростить мою проблему, у меня будет упрощенный пример...

<Grid Name="gridOne">
    <Label Content="{Binding Collection.Name}" Name="lblCaption"/>
</Grid>

<Grid Name="gridTwo">
    <Label Content="My Label" Visibility="Collapsed">
        <Label.Style>
            <Style TargetType="Label">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=lblCaption, Path=Content}" Value="Employers">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Label.Style>
    </Label>
    <TextBox Text="{Binding EmployerName}" Visibility="Collapsed">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=lblCaption, Path=Content}" Value="Employers">
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
</Grid>

Я знаю, что это тоже не сработает, если я установлю свойство Visibility как Collapsed по умолчанию в элементе управления, но у меня много коллекций, и я не думаю, что наличие одного DataTrigger для каждой коллекции — хороший способ добиться этого. В любом случае, одна проблема возникает при связывании элементов управления в разных сетках, а другая — при правильной обработке свойства Visibility.

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


person Miguel    schedule 07.11.2011    source источник


Ответы (1)


Локальное значение имеет приоритет над триггерами стиля. Переместите инициализацию видимости внутри стиля как:

<Label Content="My Label">
  <Label.Style>                    
    <Style TargetType="Label">
      <Setter Property="Visibility" Value="Collapsed"/>
      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=lblCaption, Path=Content}" Value="Employers">
          <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Label.Style>
</Label>
person anivas    schedule 07.11.2011