WPF

2011-02-03 24 views
6

में ObjectAnimationUsingKeyFrames का उपयोग करके नियंत्रण की 'शैली' संपत्ति को एनिमेट करें I ObjectAnimationUsingKeyFrames का उपयोग करके 'स्टाइल' प्रॉपर्टी को एनिमेट करने का प्रयास कर रहा हूं। जब मैं नीचे नमूना चलाता हूं, तो मुझे खाली खिड़की दिखाई देती है और इसमें कोई अपवाद नहीं है।WPF

लगभग उसी नमूना सिल्वरलाइट में काम करता है। डब्ल्यूपीएफ में यह भी काम करता है, अगर मैं सीधे नियंत्रण की 'शैली' संपत्ति असाइन करता हूं। क्या किसी को पता है कि डब्ल्यूपीएफ में 'स्टाइल' संपत्ति को एनिमेट करना संभव है?

बहुत धन्यवाद।

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:this="clr-namespace:WpfApplication1" 
    Title="MainWindow" Height="350" Width="525" 
    > 
<Window.Resources> 
    <ResourceDictionary> 

     <Style x:Key="TestStyle" TargetType="Control"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Canvas x:Name="Rectangle"> 
          <Rectangle Width="200" Height="150" Fill="Red"/> 
         </Canvas> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ResourceDictionary> 
</Window.Resources> 
<Canvas> 
    <Canvas.Triggers> 
     <EventTrigger RoutedEvent="Canvas.Loaded"> 
      <BeginStoryboard> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Target" Storyboard.TargetProperty="Style" > 
         <DiscreteObjectKeyFrame KeyTime="0:0:0.0" Value="{StaticResource ResourceKey=TestStyle}" /> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Canvas.Triggers> 

    <Canvas.Children> 
     <ContentControl x:Name="Target"/> 
    </Canvas.Children> 
</Canvas> 

+0

StaticResource के बजाय डायनामिक रिसोर्स का प्रयास करें। – Bijan

उत्तर

1

DependencyObject से ली गई है कि एक मूल्य के लिए चेतन करने के लिए ObjectAnimationUsingKeyFrames की कोशिश करता है, यह पहली वस्तु freeze प्रयास करता है। यदि ऑब्जेक्ट जमे हुए नहीं जा सकते हैं, तो यह एक अपवाद फेंकता है और एनीमेशन नहीं चलता है।

यदि आप एक कस्टम प्रकार के मूल्य को एनिमेट कर रहे हैं, तो ऐसा लगता है कि आपको या तो Freezable से प्राप्त करना होगा या DependencyObject से प्राप्त नहीं होना चाहिए।

गुण है कि पहले से ही मौजूद है कि DependencyObject से निकाले जाते हैं और नहीं Freezable, तो आप उन्हें चेतन नहीं कर सकते हैं (StyleProperty या TemplateProperty बिंदु में मामले हैं)। बजाय विभिन्न शैलियों के बीच स्विच करने की शैली में संक्रमण तर्क के

<Style.Triggers> 
    <Trigger Property="IsEnabled" Value="True"> 
    <Setter Property="Template" Value="{StaticResource TestTemplate}"/> 
    </Trigger> 
</Style.Triggers> 

बिल्ड सब: एक शैली के अंदर एक संपत्ति सेटर का उपयोग करें। आपके साथ एक चुनौती यह हो सकती है कि लक्षित संपत्ति एक निर्भरता संपत्ति होनी चाहिए ताकि आप IsLoaded का उपयोग न कर सकें।

मुझे आशा है कि आपको यह उपयोगी लगेगा।

एक अंतिम विचार: custom animations को परिभाषित करना संभव है, हालांकि मैंने इसे स्वयं नहीं किया है। एक बाहरी मौका है कि आप अपना खुद का कस्टम "ऑब्जेक्टएनीमेशन" लिख सकते हैं जो Freezable या गैर-DependencyObject कक्षाओं तक सीमित नहीं होगा।

+0

यदि आप एक शैली को एनिमेट करना चाहते हैं, तो आप अधिक जानकारी देते हैं, तो मैं अन्य विकल्पों का सुझाव दे सकता हूं। हालांकि यह एक अलग शैली के लिए एनिमेट करने के लिए अच्छा लग सकता है, मुझे यकीन है कि वांछित प्रभाव प्राप्त करने के अन्य तरीके हैं। –

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

  • कोई संबंधित समस्या नहीं^_^