WPF C # UIControl колеблется, как значок меню iPhone - PullRequest
1 голос
/ 24 марта 2011

Что я должен использовать, чтобы заставить мой WPF UIControl (например, Canvas, Buttons и т. Д.) Колебаться, как значок меню iPhone (после удержания-нажатия). Я пытаюсь создать такой же эффект для моего настольного приложения.

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

Это должно подтолкнуть вас в правильном направлении.

2 голосов
/ 23 декабря 2012

Вот что я придумала:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300">

    <Window.Resources>        
        <PathGeometry x:Key="pathUpperHalf" Figures="M 100,100 A 1,1 0 1 1 101,100 " />
        <PathGeometry x:Key="pathLowerHalf" Figures="M 101,100 A 1,1 0 1 1 100,100" />

        <Storyboard x:Key="iconCircularMovement" RepeatBehavior="Forever">
            <DoubleAnimationUsingPath Storyboard.TargetName="icon"
                Storyboard.TargetProperty="(Canvas.Left)"
                PathGeometry="{StaticResource pathUpperHalf}"
                Duration="0:0:0.1" BeginTime="0:0:0" RepeatBehavior="1x" AutoReverse="False" Source="X" />
            <DoubleAnimationUsingPath Storyboard.TargetName="icon"
                Storyboard.TargetProperty="(Canvas.Top)"
                PathGeometry="{StaticResource pathUpperHalf}"
                Duration="0:0:0.1" BeginTime="0:0:0" RepeatBehavior="1x" AutoReverse="False" Source="Y" />

            <DoubleAnimationUsingPath Storyboard.TargetName="icon"
                Storyboard.TargetProperty="(Canvas.Left)"
                PathGeometry="{StaticResource pathLowerHalf}"
                Duration="0:0:0.1" BeginTime="0:0:0.1" RepeatBehavior="1x" AutoReverse="False" Source="X" />
            <DoubleAnimationUsingPath Storyboard.TargetName="icon"
                Storyboard.TargetProperty="(Canvas.Top)"
                PathGeometry="{StaticResource pathLowerHalf}"
                Duration="0:0:0.1" BeginTime="0:0:0.1" RepeatBehavior="1x" AutoReverse="False" Source="Y" />
        </Storyboard>

        <Storyboard x:Key="iconRotate" RepeatBehavior="Forever">
            <DoubleAnimation Storyboard.TargetName="RotationTransformation"
                Storyboard.TargetProperty="(RotateTransform.Angle)"
                From="-5" To="5" Duration="0:0:0.09" BeginTime="0:0:0" AutoReverse="True" />
        </Storyboard>
    </Window.Resources>

    <Grid x:Name="grid">
        <Canvas>            
            <Rectangle x:Name="icon" Width="60" Height="60" Stroke="Black" Fill="Black" RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform x:Name="RotationTransformation" Angle="0" />
                </Rectangle.RenderTransform>
            </Rectangle>
        </Canvas>
    </Grid>
</Window>

Код позади просто:

public MainWindow()
        {
            InitializeComponent();

            var circ = FindResource("iconCircularMovement") as Storyboard;
            var rot = FindResource("iconRotate") as Storyboard;
            if (circ != null) circ.Begin();
            if (rot != null) rot.Begin();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...