1

在庫WPF GroupBoxコントロールをカスタマイズしています。私は、マウスポインタがコントロール領域に入ると、バックグラウンドのカラーアニメーションを実装する必要があります。たとえば、背景色をゆっくりと定義済みの色に変更します(ピンクにします)。ControlTemplate内のWPF Grid.BackgroundのColorAnimationのInvalidOperationException

<ControlTemplate TargetType="{x:Type GroupBox}"> 
    <Grid Name="MainGrid" SnapsToDevicePixels="true"> 
     <!-- Control layout stuff with ContentPresenter --> 
    </Grid> 

    <ControlTemplate.Triggers> 
     <EventTrigger RoutedEvent="MouseEnter"> 
      <BeginStoryboard> 
       <Storyboard> 
        <ColorAnimation 
         Storyboard.TargetName="MainGrid" 
         Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" 
         To="Pink" Duration="0:0:1" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

しかし、私はこのアニメーションを動作させることはできません。私は、カスタムコントロールテンプレートを作成しました。

「System.InvalidOperationExceptionが」このような追加情報で PresentationFramework.dllで発生しました::私はいつもタイプの未処理の例外を得る。 「背景」プロパティは、パス 」バックグラウンドでのDependencyObjectを指していません( 0) '

私はこの問題を尋ねました。それは、TargetPropertyをアニメーション化するための正しい構文を使用する必要があるようです。しかし、私は次のようなもののような変種の多くを試してみましたが、それらはすべて私の場合には動作しません:

  • Background.Color
  • (Panel.Background).Color
  • (Panel.Background).(SolidColorBrush.Color)

私が探しています正しい方向ではない?

+0

を使用することができます。ブラシとして 'ピンク'を認識しない場合は、 'StaticResource'を使用する必要がありますが、あらかじめ定義されているカラー名であれば名前だけで動作するはずです。 – Adwaenyth

+0

@Adwaenyth、確かに動作しません。追加情報: 'System.Windows.Media.Animation.ColorAnimation'アニメーションオブジェクトは、 'System.Windows.Media.Brush'型と互換性がないため、プロパティ 'Background'をアニメーション化するために使用することはできません。 – TecMan

+0

Mh ... 'Storyboard.TargetProperty =(GroupBox.Background)。(SolidColorBrush.Color)'として試してみましょう。それは、[ここ](http://stackoverflow.com/questions/14158500/wpf-animate)のように動作しますか? - バックグラウンドカラー)? – Adwaenyth

答えて

1

TargetElementは、アニメーションを機能させるためにスタイルの初期設定が必要です。

<GroupBox> 
     <GroupBox.Style> 
      <Style TargetType="GroupBox"> 
       <Style.Setters> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type GroupBox}"> 
           <Grid Name="MainGrid" SnapsToDevicePixels="true"> 
            <Grid.Style> 
             <Style TargetType="Grid"> 
              <Setter Property="Background" Value="Blue"></Setter> 
             </Style> 
            </Grid.Style> 
            <ContentPresenter/> 
           </Grid> 
           <ControlTemplate.Triggers> 
            <EventTrigger RoutedEvent="MouseEnter"> 
             <BeginStoryboard> 
              <Storyboard> 
               <ColorAnimation Storyboard.TargetName="MainGrid" Storyboard.TargetProperty="Background.Color" To="Pink" Duration="0:0:1" /> 
              </Storyboard> 
             </BeginStoryboard> 
            </EventTrigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style.Setters> 
      </Style> 
     </GroupBox.Style> 
     <Button Content="test" Width="200" Height="50"></Button> 
    </GroupBox> 

これを実行した後、あなたは簡単にだけ `TargetProperty = Background`が動作するはず使うStoryboard.TargetProperty="Background.Color"

+0

はい、本当に、私はこれについても考えました:ColorAnimationは、どのように非セットカラーからピンクにアニメーション化するのか知っていますか?しかし、私は普遍的な方法、すなわちメインレイアウトグリッドのための所定の色を設定することなくこれを行う必要がある。これを実装する方法はありますか? – TecMan

+0

ところで、Gridノードの単純なプロパティ設定でさえ助けます: ''。 – TecMan

+0

グリッドのデフォルト背景を定義することができます。組み込みのデフォルトは、透明または白である必要があります。もう一度設定すると、より一般的なアプローチになります。 – lokusking

関連する問題