Поворот производного компонента WPF Canvas с использованием кода позади - PullRequest
1 голос
/ 08 июня 2011

Я хочу создать компонент, который наследуется от поворота холста, используя раскадровку. Но когда я пытаюсь ничего не происходит.

В конце концов я также хочу динамически изменить скорость вращения до остановки. Но сначала мне нужно повернуть компонент.

Это код для компонента:

class MyToy : Canvas
{
    public MyToy()
    {
        this.Background = System.Windows.Media.Brushes.Green;
        this.Width = 300;
        this.Height = 300;

        Polyline poly = new Polyline();
        poly.Points.Add(new Point(25, 25));
        poly.Points.Add(new Point(0, 50));
        poly.Points.Add(new Point(25, 75));
        poly.Points.Add(new Point(50, 50));
        poly.Points.Add(new Point(25, 25));
        poly.Points.Add(new Point(25, 0));
        poly.Stroke = System.Windows.Media.Brushes.Blue;
        poly.StrokeThickness = 10;

        this.Children.Add(poly);
        Canvas.SetLeft(poly, 120);
        Canvas.SetTop(poly, 120);
    }
}

код окна xaml:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="500" Width="500">
    <Canvas x:Name="myCanvas">
        <Button Canvas.Left="0" Canvas.Top="0" Content="Rotate" Height="23" Name="button1" Width="111" Click="button1_Click" />
    </Canvas>
</Window>

И, наконец, код, где я создаю раскадровку:

public partial class Window1 : Window
{
    MyToy myToy;
    RotateTransform transform;

    public Window1()
    {
        InitializeComponent();

        myToy = new MyToy();
        transform = new RotateTransform();   
        // transform.Name = "MyToy1Transform";
        myToy.RenderTransform = transform;
        // this.RegisterName(transform.Name, transform);

        myToy.Name = "MyToy1";
        this.RegisterName("MyToy1", myToy);
        myCanvas.Children.Add(myToy);
        Canvas.SetTop(myToy, 50);
        Canvas.SetLeft(myToy, 50);
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        DoubleAnimation ani = new DoubleAnimation();
        ani.From = 0;
        ani.To = 359;
        ani.AutoReverse = true;
        ani.RepeatBehavior = RepeatBehavior.Forever;
        ani.Duration = new Duration(TimeSpan.FromSeconds(2));

        Storyboard story = new Storyboard();
        story.Children.Add(ani);
        // Storyboard.SetTargetName(ani, myToy.Name);
        Storyboard.SetTarget(ani, transform);
        Storyboard.SetTargetProperty(ani, new PropertyPath(RotateTransform.AngleProperty));

        story.Begin(this);
    }
}

спасибо за любую помощь.

1 Ответ

1 голос
/ 08 июня 2011

Целью вашей анимации является объект MyToy, а вашим целевым свойством является Угол. MyToy не имеет свойства угла, хотя. Решение. Задайте для свойства RenderTransform (или LayoutTransform) объекта MyToy новый объект RotateTransform. Затем используйте этот объект (который имеет свойство Angle) в качестве цели анимации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...