1

ページを点滅させる (透明から赤に) データトリガーを作成したいと考えています。そこで、ビューモデル内でブール値フラグをリッスンする DataTrigger を作成しました。このフラグは、ユーザーに通知する必要があるときはいつでも示すものとします。その場合、マイページは透明から赤色に点滅します。

データトリガーを正しい方法で実装したことはかなり確信していましたが、アプリは何もしません-エラーも点滅もありません...だから、何かが欠けているに違いありません。

<Style x:Key="ReminderPage" TargetType="{x:Type ViewTemplates:TpApplicationBarView}" BasedOn="{StaticResource TpApplicationBarViewStyle}">
    <Style.Triggers>

        <!-- Reminder animation, when the time comes to remind the user -->
        <DataTrigger Binding="{Binding IndicateReminderAnimation}" Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard x:Name="Blink">
                        <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
                                        AutoReverse="True" 
                                        From="Transparent" 
                                        To="Red" 
                                        Duration="0:0:1" 
                                        RepeatBehavior="Forever">
                        </ColorAnimation >
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>

        <DataTrigger Binding="{Binding IndicateReminderAnimation}" Value="False">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
                                        AutoReverse="False" 
                                        To="Transparent" 
                                        Duration="0:0:1">
                        </ColorAnimation >
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

それで、私は何を間違えましたか?

更新:出力ウィンドウに次のメッセージが表示されます。

System.Windows.Media.Animation Warning: 6 : Unable to perform action because 
the specified Storyboard was never applied to this object for interactive control.;        
Action='Stop'; Storyboard='System.Windows.Media.Animation.Storyboard'; 
Storyboard.HashCode='61356140'; Storyboard.Type='System.Windows.Media.Animation.Storyboard'; 
TargetElement='System.Windows.Media.Animation.Storyboard'; TargetElement.HashCode='61356140'; 
TargetElement.Type='System.Windows.Media.Animation.Storyboard'

Update2: 周りをグーグルで調べたところ、UI スレッドの問題であることがわかりました。そのため、バインドされたプロパティを設定するたびにディスパッチャー呼び出しを行いました。しかし、このトリックでも、カラー アニメーションはありません。しかし、出力ウィンドウのエラーは消えたようです。それで、アニメーションを修正する方法についてさらにアイデアを探しています。

Update3:ページの背景色を設定する一般的な問題のようです。しかし、それは本当に奇妙です。Page は NavigationFrame に配置されます。ナビゲーション フレームの背景色を設定するとアプリケーションの色が変わりますが、ページの背景色を設定しても (アニメーションがなくても) 何も変わりません。

4

2 に答える 2

0

アニメーションのターゲットを次のように設定する必要があると思います-

Storyboard.TargetName="yourWindowName"

すでにこれをチェックしているかもしれませんが、正しいオブジェクトがTpApplicationBarViewのDataContext(IndicateReminderAnimationプロパティを持つ)として設定されていることを確認してください。

于 2012-06-08T12:18:17.663 に答える
0

私はバグを見つけました-またはより良い2つのバグ。

1.)ナビゲーションフレーム内に配置されているページの背景色を変更することはできないようです。

したがって、最初はバインディングとイベントをMainWindow自体(wpfウィンドウクラス)に移動することでした

2.)データトリガーを含むスタイルが機能しませんでした。ぐるぐる回った後、私は探しているもののための実用的な解決策を見つけました。

<Storyboard x:Key="RemindUser" >
    <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
                    AutoReverse="True" 
                    From="Transparent" 
                    To="{StaticResource WinAccentBackgroundColor}" 
                    Duration="0:0:1" 
                    RepeatBehavior="Forever">
    </ColorAnimation >
</Storyboard>

<Storyboard x:Key="StopRemindUser">
    <ColorAnimation Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" 
                    AutoReverse="True" 
                    To="Transparent" 
                    Duration="0:0:1">
    </ColorAnimation >
</Storyboard>

<Style x:Key="ReminderWindow" TargetType="{x:Type Metro:SnappedTransparentWindow}" BasedOn="{StaticResource TransparentWindow}">
    <Style.Triggers>

        <!-- Reminder animation, when the time comes to remind the user -->
        <DataTrigger Binding="{Binding IndicateReminderAnimation}" Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource RemindUser}"/>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <BeginStoryboard Storyboard="{StaticResource StopRemindUser}"/>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

重要なのは、バインディングとストーリーボードを異なる部分に分割することでした。

于 2012-06-08T13:25:41.107 に答える