Изменить свойство в зависимости от свойства в другом элементе управления - WPF - PullRequest
2 голосов
/ 11 марта 2010

Я хочу использовать какой-то триггер, чтобы изменить кнопку в моем окне на IsEnabled = False, когда свойство текстового поля Validation.HasErrors моего текстового поля равно True.

Могу ли я сделать это с помощью триггеров на кнопке?

Если да, какой-нибудь пример был бы хорош!

Ответы [ 2 ]

4 голосов
/ 11 марта 2010

Вы можете сделать это с помощью стиля. Если вы хотите привязать его непосредственно к текстовому полю, вы можете сделать что-то вроде этого:

    <Style x:Key="DisabledOnErrors" TargetType="{x:Type Button}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding (Validation.HasErrors)}" Value="True">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

    <TextBox x:Name="myTextBox" />
    <Button Style="{StaticResource DisabledOnErrors}" 
            DataContext="{Binding ElementName=myTextBox}" />

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

2 голосов
/ 11 марта 2010

Да, вы можете сделать это с помощью триггеров, но поскольку вы ссылаетесь на другой элемент, вы должны использовать DataTrigger, а не обычный триггер:

<Button>
  <Button.Style>
    <Style TargetType="Button">
      <Style.Triggers>
        <DataTrigger Binding="{Binding (Validation.HasError), ElementName=tb}" Value="True">
          <Setter Property="IsEnabled" Value="False" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

Обратите внимание, что вы должны использовать стиль, а не коллекцию Button.Triggers, поскольку Button.Triggers могут содержать только EventTriggers.

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