Невозможно привязать свойство одного элемента управления в DataTrigger к другому элементу управления в разных сетках - PullRequest
0 голосов
/ 07 ноября 2011

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

Но для упрощения моей проблемы у меня будет упрощенный пример ...

<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.

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

1 Ответ

2 голосов
/ 07 ноября 2011

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

<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>
...