WPF по триггеру выполняет несколько сеттеров для разных элементов управления

У меня есть сетка с меткой, кнопкой и текстовым полем. Я хочу установить для метки forground красный цвет, а для свойства кнопки "IsEnabled" - значение False, если значение label.Content = "Invalid". Однако я не могу установить для установщика targetname в этом триггере данных, потому что «свойство Targetame не может быть установлено на установщике стиля». Как я могу это исправить, чтобы я мог использовать сеттеры для нескольких элементов всего с одним триггером, я знаю, что могу пойти и поставить точно такой же триггер данных в Button.Styletriggers, но, возможно, есть лучший способ сделать это?

   <Button Content="Save" Click="btnsave_Click" Grid.Column="1" Grid.Row="2" x:Name="btnsave" IsEnabled="True" />
            <Label Content="{Binding ElementName=txtclc, Path=Text, Converter={StaticResource convertcode}}" Name="lblcheckclc"  Grid.Row="1" Grid.Column="2">
                <Label.Resources>
                    <Style TargetType="{x:Type Label}">
                        <Setter Property="Foreground" Value="Green" />

                        <Style.Triggers>
                            <DataTrigger  Binding="{Binding ElementName=lblcheckclc, Path=Content}" Value="Invalid">
                                <Setter Property="Foreground" Value="Red" />
                                <Setter TargetName="btnsave" Property="IsEnabled" Value="False"  /> <!--This line is the problem-->

                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Label.Resources>
            </Label>

PS: Если я прокомментирую второй установщик, он будет работать (если значение label = "Invalid", то передний план станет красным


person Maximc    schedule 24.02.2012    source источник
comment
Есть ли конкретная причина, по которой вы хотите использовать здесь неявный стиль? Разве вы не имеете в виду ‹Label.Style› вместо этого?   -  person Louis Kottmann    schedule 24.02.2012
comment
@ Бабуин Я не знаю, но разве это не то же самое?   -  person Maximc    schedule 24.02.2012
comment
Это не то же самое. Неявные стили предназначены для глобальных установщиков для конкретного FrameworkElement. Сейчас я считаю, что вы применяете этот стиль только к дочерним элементам своего ярлыка, а не к самому ярлыку. Хотя я мог ошибаться.   -  person Louis Kottmann    schedule 02.03.2012


Ответы (1)


Ознакомьтесь с этим msdn forum, чтобы получить ответ на свой вопрос

Также ваш раздел триггеров некорректен, вы должны использовать:

<Style.Triggers>
   <Trigger Property="Content" Value="Invalid">
      <Setter Property="Foreground" Value="Red" />
   </Trigger>
</Style.Triggers>

Используйте триггер, если вы планируете отслеживать свойство вашего элемента, например Content.

Чтобы ваш пример работал либо:

  • Свяжите свойство IsEnabled вашей кнопки с содержимым вашей метки и реализуйте конвертер, который преобразует строку в bool.
  • Создайте стиль для кнопки с триггером данных, который устанавливает свойство IsEnabled.
person Andrei Gavrila    schedule 24.02.2012