2012-03-17 9 views
3

まあとのStackPanelの背景色を変更する、私はColorAnimationを使用するDataTemplate内のStackPanelの背景色を変更しようとしています:はColorAnimation

<DataTemplate DataType="{x:Type logic:Sensor}"> 
     <StackPanel Name="SensorPanel" MouseDown="SensorPanel_MouseDown"> 
     </StackPanel> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Status}" Value="0"> 
       <!--<Setter TargetName="SensorPanel" Property="Background" Value="LawnGreen" />--> 

       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <ColorAnimation 
           Storyboard.TargetName="SensorPanel" 
           Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" 
           To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4"> 
          </ColorAnimation> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 

      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 

ノーコンパイル時のエラーを。しかし、これを実行すると、InvalidOperationExceptionがスローされます。 "'' Background 'プロパティはパス'(0)。(1) 'のDependencyObjectを指しません。"

何ですか? :D

+0

[リンク](HTTP:/

ではなくSolidColorBrushColorプロパティをアニメーション化し、その後... ...

<StackPanel Name="SensorPanel" MouseDown="SensorPanel_MouseDown"> <StackPanel.Background> <SolidColorBrush Color="White" x:Name="PanelColor"/> </StackPanel.Background> </StackPanel> 

をお使いのパネルのブラシを定義します/stackoverflow.com/questions/17399210/background-property-does-not-point-to-a-dependencyobject-in-path-0-1) あなたの問題と同様のこのリンクが表示される場合があります。 –

答えて

17

あなたのコードは私にとって完璧に機能しました。私はちょっとした変更を加えました。文書化のため

<DataTemplate DataType="{x:Type Model:Sensor}"> 
     <StackPanel Name="SensorPanel" Background="LightBlue" Width="100" Margin="5"> 
      <TextBlock Text="{Binding Name}"/> 
      <ToggleButton Margin="2" IsChecked="{Binding IsChecked}" Content="Set status=0" /> 
     </StackPanel> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Status}" Value="0"> 
       <!--<Setter TargetName="SensorPanel" Property="Background" Value="LawnGreen" />--> 

       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <ColorAnimation 
          Storyboard.TargetName="SensorPanel" 
          Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" 
          To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4"> 
          </ColorAnimation> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 

      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 

    <ListBox ItemsSource="{Binding Sensors}" /> 
+0

ありがとう、しかしそれは永遠に繰り返すことになっていますか?それはそうしているからです。 : – liranxs

+4

RepeatBehaviour = "4x"はそれを修正します。数字を指定するとTimeSpanと解釈されますので、'04:00:00 'または' 4時間 'を意味します – Phil

10

それは(Panel.Background).(SolidColorBrush.Color)を使用するには少し難しいです。実際の問題は、はBrushの代わりにColorプロパティに対してのみ機能することです。私にとって、これはトリックです:

<ColorAnimation 
    Storyboard.TargetName="PanelColor" 
    Storyboard.TargetProperty="Color" 
    To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4"> 
+0

受け入れられる回答である必要があります。 –