0

私は最近Blendの試用版をダウンロードした開発者であり、CodeBehindを使用せずに作業を進めようとしています。非常にクールですが、かなりの学習曲線があります。

私はここでこれらのタットから始めて、ポーカーブラインドタイマーの例のようにメニューにいくつかの簡単なアニメーションを実装しました。私が今やりたいのは、メニューの遷移を20秒後にのみ開始することです。そのため、MouseLeaveで消える左側のメニュー(上記のリンクを参照)-マウスが離れてから20秒後にのみ消えます(マウスオーバーするとキャンセルされます)。これにより、誤ってマウスをオフにした場合に備えて、メニューが長く留まります。

Blendでは本当に簡単だと思いますが、まともなドキュメントを見つけるために戦っています-私は喜んでRTFMをします-どこから探し始めるかを知る必要があります(私は喜びなしで「Blendtimerstateaction」をグーグルで検索しました)。

ヒントをありがとう!

4

2 に答える 2

1

私があなたの問題を正しく理解している場合:

  • サイドメニューでMouseEnterイベントを取得すると、アニメーション化されます(「ShowMenuStoryboard」など)。
  • 次に、「HideMenuStoryboard」でメニューをスライドさせて元に戻しますが、(MouseLeaveイベントによって)トリガーされてから20秒後に変更を開始しますが、後続のMouseEnterイベントが発生した場合はキャンセルする必要があります。
  • コードビハインドロジックを使用せずに、これらすべてを実行したいと考えています。

やるべきことは2つあります。

  1. ストーリーボードで終了状態の値のみを指定し(開始状態は指定しない)、
  2. HideStoryboardのXAMLでBeginTime="0:0:20​​"を設定する必要があります。

    <ストーリーボードx:Name = "HideMenuStoryboard" BeginTime = "0:0:20​​" >

Expression BlendエディターでBeginTimeのプロパティがどこにも見つからなかったため、これはXAMLビューで実行する必要があります。プロパティには、AutoReverseとRepeatBehaviorのみが表示されます。

この種のアニメーションには固有の問題がありますが、例としては問題ないはずです。継続時間は固定されているため、開始中に反対のアニメーションをトリガーすると、「現在の場所から」最終位置に移動するのに一定の時間がかかるため、実際には最終位置までのアニメーションが遅くなります。

お役に立てれば。memuメニューを含む完全なサンプルMainPage.XAMLを以下に示します。2つのストーリーボードとストーリーボードコントロールの動作のみが必要です。

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    x:Class="SilverlightApplication1.MainPage"
    mc:Ignorable="d">
    <UserControl.Resources>
        <Storyboard x:Name="ShowMenuStoryboard">
            <DoubleAnimation Duration="0:0:0.5" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"/>
        </Storyboard>
        <Storyboard x:Name="HideMenuStoryboard" BeginTime="0:0:20">
            <DoubleAnimation Duration="0:0:0.5" To="-100" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"/>
        </Storyboard>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel x:Name="stackPanel" HorizontalAlignment="Left" Orientation="Vertical" Width="150" d:LayoutOverrides="Height" RenderTransformOrigin="0.5,0.5" Background="#FF646CE7">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeave">
                    <ei:ControlStoryboardAction Storyboard="{StaticResource HideMenuStoryboard}"/>
                </i:EventTrigger>
                <i:EventTrigger EventName="MouseEnter">
                    <ei:ControlStoryboardAction Storyboard="{StaticResource ShowMenuStoryboard}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <StackPanel.RenderTransform>
                <CompositeTransform TranslateX="-100"/>
            </StackPanel.RenderTransform>
            <StackPanel.Projection>
                <PlaneProjection/>
            </StackPanel.Projection>
            <TextBlock TextWrapping="Wrap" Text="TextBlock"/>
            <TextBlock TextWrapping="Wrap" Text="TextBlock"/>
            <TextBlock TextWrapping="Wrap" Text="TextBlock"/>
            <TextBlock TextWrapping="Wrap" Text="TextBlock"/>
            <TextBlock TextWrapping="Wrap" Text="TextBlock"/>
        </StackPanel>
    </Grid>
</UserControl>
于 2010-08-18T11:57:48.980 に答える
0

2番目のアニメーションのトリガーとして機能する「偽の」ストーリーボードを追加できます。2つのストーリーボードが必要になります。偽物とHideMenu。それぞれを開始するには、ControlStoryboardActionsを実行する必要があります。最初のものにはイベントトリガー(マウスアウト)があります。最初のものには、「偽の」アニメーションにリンクされたStoryboardCompleterTriggerがあります。

于 2010-08-18T12:23:52.667 に答える