2009-09-15 27 views
5

मेरे पास निम्न शैली का उपयोग कर सीमा के साथ एक WPF प्रोजेक्ट है। यह योजना है कि जब माउस सीमा पर चलता है तो चमक प्रभाव को फीका करने के लिए, और जब यह छोड़ देता है तो फीका होता है।DropShadowEffect की अस्पष्टता को कैसे एनिमेट करें?

<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> 

समस्या यह है कि कुछ भी नहीं होता! एनीमेशन काम करता है अगर मैं स्टोरीबोर्ड टार्गेटप्रोपर्टी में "ड्रॉपशैडोफेक्ट" को "UIElement" में बदलता हूं, लेकिन यह पूरे नियंत्रण को फीका करता है।

मैं DropShadowEffect को कैसे फीका कर सकता हूं?

उत्तर

6

अंकों की ध्यान देने योग्य कुछ

1) आप सीमा का एक वास्तविक संपत्ति को लक्षित करने की आवश्यकता है - आप प्रभाव संपत्ति के मूल्य (DropShadowEffect), नहीं संपत्ति ही निशाना बनाने के लिए कोशिश कर रहा है प्रभाव में हैं।

2) आपको PropertyPath के सिंटैक्स को सॉर्ट करने की आवश्यकता है।

निम्नलिखित करने के लिए अपने Storyboard.Target संपत्ति को बदलें और आप ठीक होना चाहिए: के रूप में टिप्पणी में उल्लेख किया

Storyboard.TargetProperty="(Effect).Opacity" 

संपादित कार्य कोड:

<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

मैं एक InvalidOperationException मिलता है क्योंकि प्रभाव 'नहीं करता है एक अस्पष्टता संपत्ति नहीं है। प्रभाव का मूल्य DropShadowEffect है जिसमें अस्पष्टता संपत्ति है जिसे मैं लक्षित करने की कोशिश कर रहा हूं, लेकिन जैसा कि आप इंगित करते हैं कि मेरा एक्सएएमएल गलत है। मैंने x को सेट करने का प्रयास किया है: DropShadowEffect पर नाम लेकिन आप स्टाइल में TargetName का उपयोग नहीं कर सकते हैं। स्टोरीबोर्ड में इन ब्रैकेट के उपयोग के बारे में एमएसडीएन दस्तावेज में एक छेद है, लेकिन मैंने इसे PropertyPath की सहायता से ट्रैक किया। हालांकि मैं अभी भी समस्या का समाधान नहीं कर सकता। मुझे लगता है कि मुझे DropShadowEffect पर प्रभाव डालना होगा लेकिन यह XAML में संभव नहीं लगता है। कोई अन्य विचार? – Zodman

+0

मैंने आपके द्वारा प्रदत्त वाक्यविन्यास का उपयोग करके काम कर रहे कोड को प्राप्त करने में कामयाब रहा, मैंने इसे एक छीन लिया गया नमूना ऐप में किया। मैं जो भी इस्तेमाल करता हूं उसे पोस्ट करूंगा और आप उस से वापस काम कर सकते हैं ... –

+0

नोट मैंने उन सेटर्स को हटा दिया है जो स्थिर संसाधनों का उपयोग करते हैं जिन्हें आपने प्रदान नहीं किया है, लेकिन यह प्रदर्शन को प्रभावित नहीं करेगा। और मुझे लगता है कि आप अपनी शैली के भीतर TextBlock.Foreground संपत्ति सेट करने की कोशिश कर रहे हैं जो काम नहीं करेगा। –

संबंधित मुद्दे