2010-04-14 3 views
1

фона:Конфликт, когда две раскадровки устанавливают свойство непрозрачности?

У меня есть WPF UserControl (MainControl - не показано в коде ниже), который содержит еще один (так называемый MyControl в коде ниже).

MainControl имеет значение DataContext для объекта, обладающего свойством Project. Когда MainControl загружается, свойство Project всегда равно null.

Проблема:

Когда MainControl нагрузка, я хочу, чтобы исчезнуть в MyControl с помощью специальной раскадровки (используется только этот один раз (это «specialFadeInStoryboard» меняет непрозрачность-свойство MyControl от 0 до 1) .

Если для свойства Project установлено значение, отличное от нуля, я хочу, чтобы MyControl исчезал с помощью «fadeOutStoryboard» (изменяет свойство Opacity-свойства MyControl на 0), и если после этого он будет равен нулю, я хочу на этот раз снова затухает, используя «fadeInStoryboard» (изменяет свойство непрозрачности MyControl на 1).

Однако после добавления кода для «specialFadeInStoryboard» MyControl никогда не исчезает ...

Что я делаю неправильно?

<local:MyControl Visibility="{Binding RelativeSource={RelativeSource Self}, Path=Opacity, Converter={StaticResource opacityToVisibilityConverter}, Mode=OneWay}"> 
    <local:MyControl.Style> 
     <Style> 
      <Style.Triggers> 
       <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
        <BeginStoryboard Storyboard="{StaticResource specialFadeInStoryboard}"/> 
       </EventTrigger> 
       <DataTrigger Binding="{Binding Project, Converter={StaticResource nullToBooleanConverter}, Mode=OneWay}" Value="True"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard Storyboard="{StaticResource fadeOutStoryboard}"/> 
        </DataTrigger.EnterActions> 
        <DataTrigger.ExitActions> 
         <BeginStoryboard Storyboard="{StaticResource fadeInStoryboard}"/> 
        </DataTrigger.ExitActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </local:MyControl.Style> 
</local:MyControl> 

ответ

1

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

<DataTrigger.EnterActions> 
    <StopStoryboard BeginStoryboardName="specialFadeInStoryboard"/> 
    <BeginStoryboard Storyboard="{StaticResource fadeOutStoryboard}"/> 
</DataTrigger.EnterActions> 
+0

Спасибо за ответ, но тег дает мне эту ошибку, когда EnterActions это пожары: InvalidOperationException: Название «specialFadeInStoryboard» не может быть найдено в рамках имени 'System.Windows.Style'. Я даже попытался переместить раскадровку, так что это ребенок из ... Но это тоже не работает :( – kennethkryger

+0

Решил его, создав af Style, с сеттером для «Шаблон Значение шаблона - это ControlTemplate, где все раскадровки определены в разделе «ControlTemplate.Resources» ... – kennethkryger

Смежные вопросы