Закрытие всплывающего окна после нажатия дочерней кнопки без использования кода - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть приложение wpf с окном переключения, которое открывает всплывающий элемент управления. Я хочу иметь возможность закрыть его после того, как пользователь нажимает на его дочернюю кнопку.

Я бы предпочел сделать это в xaml с помощью триггеров стилей. Но по какой-то причине я не могу установить свойство popup IsOpen внутри триггера события. Я получаю сообщение об ошибке

A value of type setter cannot be added to a collection or dictionary of type TriggerActionCollection

. Вот как я настроил xaml

<ToggleButton x:Name="ShowAvailableOptionsToggleButton"
                                              Content="Add Options" />

<Popup IsOpen="{Binding IsChecked, ElementName=ShowAvailableOptionsToggleButton}">
                <StackPanel>
                    <ListView ItemsSource="{Binding AvailableOptions}"
                              IsSynchronizedWithCurrentItem="True"
                              DisplayMemberPath="Name"/>
                    <Button Content="Add"
                            Name="AddOptionBtn"
                            Command="{Binding AddOptionCommand}"/>
                </StackPanel>
                <Popup.Style>
                   <Style>
                       <Style.Triggers>
                          <EventTrigger SourceName="AddOptionBtn" RoutedEvent="Button.Click"> 
                             //ERROR HAPPENS HERE
                             <Setter Property="IsOpen" Value="False"/>
                          </EventTrigger>
                       </Style.Triggers>
                   </Style>
                </Popup.Style>
            </Popup>

Может кто-то увидеть, что я делаю неправильно?

1 Ответ

1 голос
/ 18 февраля 2020

EventTrigger должен использоваться с анимацией:

<Popup IsOpen="True">
  <Button x:Name="AddOptionBtn"
          Content="Add" />
  <Popup.Triggers>
    <EventTrigger SourceName="AddOptionBtn" 
                  RoutedEvent="Button.Click">
      <BeginStoryboard>
        <Storyboard>
          <BooleanAnimationUsingKeyFrames Storyboard.Target="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Popup}}"
                                          Storyboard.TargetProperty="IsOpen">
            <DiscreteBooleanKeyFrame KeyTime="0"
                                     Value="False" />
          </BooleanAnimationUsingKeyFrames>
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </Popup.Triggers>
</Popup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...