2009-09-15 13 views
5

Aşağıdaki stili kullanarak bir kenarlığı olan bir WPF projem var. Plan, farenin kenarlık üzerinde hareket ettiği zaman, parlama efektinin solması ve ayrıldığında sönmesidir.Bir DropShadowEffect'in Opaklığı nasıl canlandırılır?

<Style x:Key="BorderGlow" TargetType="Border"> 
    <Style.Resources> 
     <Storyboard x:Key="GlowOn"> 
      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(DropShadowEffect.Opacity)"> 
       <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 
     <Storyboard x:Key="GlowOff"> 
      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(DropShadowEffect.Opacity)"> 
       <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 
    </Style.Resources> 

    <Setter Property="CornerRadius" Value="6,1,6,1" /> 
    <Setter Property="BorderBrush" Value="{StaticResource SelectedBorder}" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="Background" Value="{StaticResource DeselectedBackground}" /> 
    <Setter Property="RenderTransformOrigin" Value="0.5,0.5" /> 
    <Setter Property="TextBlock.Foreground" Value="{StaticResource SelectedForeground}" /> 

    <Setter Property="RenderTransform"> 
     <Setter.Value> 
      <RotateTransform Angle="90"/> 
     </Setter.Value> 
    </Setter> 

    <Setter Property="Effect"> 
     <Setter.Value> 
      <DropShadowEffect ShadowDepth="0" BlurRadius="8" Color="#FFB0E9EF"/> 
     </Setter.Value> 
    </Setter> 

    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 

      <Trigger.EnterActions> 
       <BeginStoryboard Storyboard="{StaticResource GlowOn}"/> 
      </Trigger.EnterActions> 

      <Trigger.ExitActions> 
       <BeginStoryboard Storyboard="{StaticResource GlowOff}"/> 
      </Trigger.ExitActions> 

     </Trigger> 
    </Style.Triggers> 
</Style> 

Sorun şu ki, hiçbir şey olmuyor! Animasyon, Storyboard TargetProperty'de "DropShadowEffect" i "UIElement" olarak değiştirirsem de çalışır, ancak bu tüm kontrolü eler.

Sadece DropShadowEffect'te nasıl kaybolurum? Sen Etkisi özelliğinin değerini (DropShadowEffect) değil, mülkiyet kendisi hedef için çalışıyoruz yürürlükte olan -

cevap

6

Birkaç nokta Sen Sınır gerçek özelliğini hedeflemesi gereken)

1 nota.

2) PropertyPath'un sözdizimini sıralamanız gerekir.

aşağıdaki şekilde Storyboard.Target özelliğini değiştirin

ve ince olmalıdır:

Storyboard.TargetProperty="(Effect).Opacity" 

DÜZENLEME kodunu Çalışma açıklamada belirtildiği gibi: Etki kokan çünkü bir InvalidOperationException olsun

<Border BorderThickness="10" Height="100" Width="100"> 
    <Border.BorderBrush> 
     <SolidColorBrush Color="Red"></SolidColorBrush> 
    </Border.BorderBrush> 
    <Border.Style> 
     <Style TargetType="Border"> 
      <Style.Resources> 
       <Storyboard x:Key="GlowOn"> 
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
          Storyboard.TargetProperty="(Effect).Opacity"> 
         <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/> 
        </DoubleAnimationUsingKeyFrames> 
       </Storyboard> 
       <Storyboard x:Key="GlowOff"> 
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
          Storyboard.TargetProperty="(Effect).Opacity"> 
         <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/> 
        </DoubleAnimationUsingKeyFrames> 
       </Storyboard> 
      </Style.Resources> 

      <Setter Property="CornerRadius" Value="6,1,6,1" /> 
     <!--<Setter Property="BorderBrush" 
        Value="{StaticResource SelectedBorder}" />--> 
      <Setter Property="BorderThickness" Value="1" /> 
     <!--<Setter Property="Background" 
        Value="{StaticResource DeselectedBackground}" />--> 
      <Setter Property="RenderTransformOrigin" Value="0.5,0.5" /> 
     <!--<Setter Property="TextBlock.Foreground" 
        Value="{StaticResource SelectedForeground}" />--> 

      <Setter Property="RenderTransform"> 
       <Setter.Value> 
        <RotateTransform Angle="90"/> 
       </Setter.Value> 
      </Setter> 

      <Setter Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect ShadowDepth="20" 
             BlurRadius="8" 
             Color="#FFB0E9EF"/> 
       </Setter.Value> 
      </Setter> 

      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 

        <Trigger.EnterActions> 
         <BeginStoryboard 
           Storyboard="{StaticResource GlowOn}"/> 
        </Trigger.EnterActions> 

        <Trigger.ExitActions> 
         <BeginStoryboard 
           Storyboard="{StaticResource GlowOff}"/> 
        </Trigger.ExitActions> 

       </Trigger> 
      </Style.Triggers> 

     </Style> 
    </Border.Style> 
</Border> 
+0

Bir Opaklık özelliği var. Efektin değeri, hedeflemeye çalıştığım Opaklık özelliğine sahip olan DropShadowEffect'tir, ancak XAML'imin yanlış olduğunu belirttiğinizde. DropShadowEffect'te x: Name ayarlamayı denedim, ancak TargetName'i Stiller'de kullanamazsınız. MSDN belgelerinde bu parantezlerin storyboard'larda kullanımıyla ilgili bir delik var, ancak PropertyPath'in yardımında onu izledim. Ancak hala sorunu çözemiyorum. Sanırım DropShadowEffect'e efekt vermem gerekiyor ama XAML'de bu mümkün görünmüyor. Başka herhangi bir fikir var mı? – Zodman

+0

Gönderdiğim sözdizimini kullanarak yayınladığınız kodu almayı başardım, bunu arka arkaya bir örnek uygulamada yaptım. Kullandığım şeyi yayınlayacağım ve belki de bundan geri dönebilirsiniz ... –

+0

Not Sağlanmadığınız ancak gösterimi etkilemeyecek statik kaynakları kullanan ayarlayıcıları kaldırdım. Ve ayrıca, çalışmalarınızda olmayacak şekilde, TextBlock.Foreground özelliğini ayarlamaya çalıştığınızı görüyorum. –

İlgili konular