質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

2回答

4448閲覧

wpf storyboardについて

piero

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/02/28 01:28

点滅するボタンを作っています。色は、グラデーションで、マウスオーバー時と通常時では、色が異なります。
今のままだと、0からマウスオーバーのアニメーションが開始してしまうため、点滅がずれてしまいます。5時間調べたのですが、もうお手上げです。
ノーマルのアニメーションの終了位置から開始して、点滅のずれをなくす方法はないでしょうか。
以下、現在のコードです。

<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="False">
<Trigger.EnterActions>
<BeginStoryboard Name="AAA">
<Storyboard RepeatBehavior="Forever" AutoReverse="True" >
<ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" To="#CCCCCC" Duration="0:0:0.5" />
<ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" To="#F0F0F0" Duration="0:0:0.5" />
<ColorAnimation Storyboard.TargetProperty="Foreground.Color" To="#232323" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="AAA" />
</Trigger.ExitActions>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Sample}" />
<Trigger.EnterActions>
<BeginStoryboard Name="BBB">
<Storyboard RepeatBehavior="Forever" AutoReverse="True">
<ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" To="#CCCCCC" Duration="0:0:0.5" />
<ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" To="#FAFAFA" Duration="0:0:0.5" />
<ColorAnimation Storyboard.TargetProperty="Foreground.Color" To="#232323" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="BBB" />
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

色々試してみたけど簡単に実装するのは難しそうですね。

グレーの濃度変えるだけの処理みたいですし、Borderの上に透明のレイヤーを重ねてマウスオーバーでそのレイヤーに着色して濃くするとかで簡易対策しては?

ただ、色を途中で変化させるとそれだけで視覚的には「がくっ」と変化したように見えて違和感が残ります。

以下はアップされたソースコードそのままではないですが、マウスオーバーで点滅がほんの少しだけ暗くなるボタンのテンプレートです。

<ControlTemplate TargetType="Button"> <Border Name="HoverButtonBorder" BorderThickness="2" BorderBrush="Blue" Background="#CCCCCC"> <Grid> <Border Name="HoverOverlay" BorderThickness="0" Background="Gray" Opacity="0"/> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </Border> <ControlTemplate.Triggers> <EventTrigger RoutedEvent="Button.Loaded"> <BeginStoryboard> <Storyboard RepeatBehavior="Forever" AutoReverse="True" > <ColorAnimation Storyboard.TargetName="HoverButtonBorder" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#F0F0F0" Duration="0:0:0.5" /> </Storyboard> </BeginStoryboard> </EventTrigger> <Trigger Property="IsMouseOver" Value="false"> <Trigger.Setters> <Setter TargetName="HoverOverlay" Property="Opacity" Value="0" /> </Trigger.Setters> </Trigger> <Trigger Property="IsMouseOver" Value="true"> <Trigger.Setters> <Setter TargetName="HoverOverlay" Property="Opacity" Value="0.2" /> </Trigger.Setters> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>

見たら感じられると思いますが、色が変わる瞬間に違和感があると思います。
待機中も常に点滅していて、更にその点滅色を変えるのはデザイン上どうなのかなと思います。
やるにしてもアニメーションが一旦Completeした後にStoryboardを切り替えるとかやりたい気がしますね。

投稿2017/02/28 05:49

haru666

総合スコア1591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

XAML だけで実現するのは難しいと思います。
まずは上記の XAML コードをコードビハインド上で組んでみてください。
その後、
ノーマルのアニメーションの終了位置での状態を次の開始点とするように、
挑戦してみてください。

投稿2017/02/28 03:25

twyujiro15

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問