Установка свойства с EventTrigger

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

  1. Убедитесь, что банки не повреждены:

    jar tf myjar.jar

  2. Перезапустите затмение и обновите настройки проекта, щелкнув правой кнопкой мыши по проекту -> Maven -> Обновить проект

  3. . Мне выпал вариант навигации по папке рабочей области, а затем удалите файлы:

    .metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache .metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache

После этого перезапустите затмение и пересоберите проект.

67
задан Chris Nicol 3 June 2009 в 00:23
поделиться

2 ответа

Как бы я ни любил XAML, для такого рода задач я переключаюсь на программный код. Прикрепленное поведение - хороший образец для этого. Имейте в виду, что Expression Blend 3 предоставляет стандартный способ программирования и использования поведения. На сайте сообщества Expression есть несколько существующих .

22
ответ дан 24 November 2019 в 14:44
поделиться

Остановка раскадровки может быть выполнена в коде позади, или xaml, в зависимости от того, откуда возникла необходимость.

Если EventTrigger перемещается за пределы кнопки, мы можем продолжить и нацелить его на другой EventTrigger, который скажет раскадровке остановиться. Когда раскадровка остановлена ​​таким образом, она не вернется к предыдущему значению.

Здесь я переместил Button.Click EventTrigger в окружающий StackPanel и добавил новый EventTrigger в CheckBox.Click, чтобы остановить раскадровку Button при нажатии на CheckBox. Это позволяет нам проверять и снимать отметку с CheckBox при щелчке по нему, а также дает нам желаемое поведение при снятии отметки с кнопки.

    <StackPanel x:Name="myStackPanel">

        <CheckBox x:Name="myCheckBox"
                  Content="My CheckBox" />

        <Button Content="Click to Uncheck"
                x:Name="myUncheckButton" />

        <Button Content="Click to check the box in code."
                Click="OnClick" />

        <StackPanel.Triggers>

            <EventTrigger RoutedEvent="Button.Click"
                          SourceName="myUncheckButton">
                <EventTrigger.Actions>
                    <BeginStoryboard x:Name="myBeginStoryboard">
                        <Storyboard x:Name="myStoryboard">
                            <BooleanAnimationUsingKeyFrames Storyboard.TargetName="myCheckBox"
                                                            Storyboard.TargetProperty="IsChecked">
                                <DiscreteBooleanKeyFrame KeyTime="00:00:00"
                                                         Value="False" />
                            </BooleanAnimationUsingKeyFrames>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>

            <EventTrigger RoutedEvent="CheckBox.Click"
                          SourceName="myCheckBox">
                <EventTrigger.Actions>
                    <StopStoryboard BeginStoryboardName="myBeginStoryboard" />
                </EventTrigger.Actions>
            </EventTrigger>

        </StackPanel.Triggers>
    </StackPanel>

Чтобы остановить раскадровку в исходном коде, нам нужно сделать что-то немного другое. Третья кнопка предоставляет метод, с помощью которого мы остановим раскадровку и установим для свойства IsChecked значение true с помощью кода.

Мы не можем вызвать myStoryboard.Stop (), потому что мы не начали раскадровку с помощью кода, устанавливающего параметр isControllable . Вместо этого мы можем удалить раскадровку. Для этого нам понадобится FrameworkElement, на котором существует раскадровка, в данном случае наша StackPanel. После удаления раскадровки мы снова можем установить свойство IsChecked, сохраняя его в пользовательском интерфейсе.

    private void OnClick(object sender, RoutedEventArgs e)
    {
        myStoryboard.Remove(myStackPanel);
        myCheckBox.IsChecked = true;
    }
6
ответ дан 24 November 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: