Как повернуть прямую линию с фиксированной конечной точкой в ​​WPF - PullRequest
0 голосов
/ 29 декабря 2018

Я хочу повернуть линию L, перемещая конечную точку (X2, Y2), сохраняя начальную точку (X1, Y1) фиксированной в (0,0).Приведенный ниже код заставляет линию вращаться вдоль средней точки линии L. Можете ли вы помочь мне, как это сделать.

//XAML
<Window x:Class="SPDisplay.MainWindow"
        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:local="clr-namespace:SPDisplay"
        mc:Ignorable="d"
        Title="PPI Display" Height="1000" Width="1000">
    <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center" Name="sp">

        <Line Stroke="Black" StrokeThickness="2" Margin="0" Name="lineSweep"
                X1="0" Y1="0" X2="0" Y2="0"/>       
    </StackPanel>
</Window>

//C# code

using System;
using System.Windows;
using System.Windows.Shapes;
using System.Windows.Media.Animation;

Storyboard sb = new Storyboard();

DoubleAnimation animateY1 = new DoubleAnimation();
animateY1.From = 0;
animateY1.To = 0;
animateY1.Duration = TimeSpan.Parse("0:0:5");

DoubleAnimation animateX1 = new DoubleAnimation();
animateX1.From = 0;
animateX1.To = 0;
animateX1.Duration = TimeSpan.Parse("0:0:5");

DoubleAnimation animateY2 = new DoubleAnimation();
animateY2.From = 200;
animateY2.To = 0;
animateY2.Duration = TimeSpan.Parse("0:0:5");

DoubleAnimation animateX2 = new DoubleAnimation();
animateX2.From = 0;
animateX2.To = 200;
animateX2.Duration = TimeSpan.Parse("0:0:5");

sb.Children.Add(animateY1);
sb.Children.Add(animateX1);

sb.Children.Add(animateY2);
sb.Children.Add(animateX2);

Storyboard.SetTargetName(animateY1, "lineSweep");
Storyboard.SetTargetProperty(animateY1, new PropertyPath(Line.Y1Property));

Storyboard.SetTargetName(animateX1, "lineSweep");
Storyboard.SetTargetProperty(animateX1, new PropertyPath(Line.X1Property));


Storyboard.SetTargetName(animateY2, "lineSweep");
Storyboard.SetTargetProperty(animateY2,new PropertyPath(Line.Y2Property));

Storyboard.SetTargetName(animateX2, "lineSweep");
Storyboard.SetTargetProperty(animateX2, new PropertyPath(Line.X2Property));

sb.Begin(lineSweep);

1 Ответ

0 голосов
/ 29 декабря 2018

Анимация на самом деле делает то, что вы хотите.Проблема в контейнере, который вы выбрали.Если вы установите Background="Red" для своего StackPanel, вы увидите, что происходит.Попробуйте Canvas вместо StackPanel.

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