Я скажу, что, возможно, некоторые ответы работают для некоторых случаев, но мне нужно было пройти лишнюю милю. Поэтому я постараюсь сделать резюме того, что можно сделать:
Убедитесь, что банки не повреждены:
jar tf myjar.jar
Перезапустите затмение и обновите настройки проекта, щелкнув правой кнопкой мыши по проекту -> Maven -> Обновить проект
. Мне выпал вариант навигации по папке рабочей области, а затем удалите файлы:
.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache
.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache
После этого перезапустите затмение и пересоберите проект.
Как бы я ни любил XAML, для такого рода задач я переключаюсь на программный код. Прикрепленное поведение - хороший образец для этого. Имейте в виду, что Expression Blend 3 предоставляет стандартный способ программирования и использования поведения. На сайте сообщества Expression есть несколько существующих .
Остановка раскадровки может быть выполнена в коде позади, или 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;
}