WPF从中心点开始旋转线

时间:2017-11-16 18:28:02

标签: c# .net wpf xaml

我正在尝试使用WPF和c#绘制线条并面对以下问题。

成像我必须画一条固定长度的线,我需要用给定的角度旋转这条线。假设45度。 但条件是我应该从中心点旋转它。 我附上图片以便清楚理解。

descriptive image

任何人都可以帮我写一个C#程序。

2 个答案:

答案 0 :(得分:5)

要按自定义角度旋转线条,请对其应用RotateTransform。您可以将RenderTransformOrigin属性设置为0.5 0.5以围绕中心点旋转。

<Grid Width="200" Height="200">
    <Line X1="0" Y1="0" X2="1" Y2="0" Stretch="Uniform" Stroke="Blue" StrokeThickness="2" RenderTransformOrigin="0.5 0.5">
        <Line.RenderTransform>
            <RotateTransform Angle="45" />
        </Line.RenderTransform>
    </Line>
</Grid>

如果角度是固定的(例如总是相同的),您可以计算起点和终点的坐标,并绘制对角线而不使用变换:

<Line X1="0" Y1="0" X2="200" Y2="200" Stroke="Blue" StrokeThickness="2" />

答案 1 :(得分:0)

这里的想法,你需要改进它,把它塑造成你需要的东西

    private void Rotate()
    {
        while (Degrees >= 360)
            Degrees -= 360;
        while (Degrees <= -360)
            Degrees += 360;

        X1 = 0;
        Y1 = 0;
        var rad = Degrees * Math.PI / 180;
        const int radius = 100;
        var sin = Math.Sin(rad);
        var cos = Math.Cos(rad);
        var tan = Math.Tan(rad);

        Y2 = sin * radius;
        X2 = cos * radius;

    }

XAML

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0" Orientation="Horizontal" >
        <Label Content="Rotation" />
        <TextBox  Text="{Binding Degrees}" Width="50" Margin="5,5,0,5" HorizontalContentAlignment="Right" VerticalContentAlignment="Center"/>
        <Label Content="°" />
        <Button Content="Rotate" Margin="5" Command="{Binding RotateCommand}"/>
    </StackPanel>
    <Grid    Grid.Row="1"  HorizontalAlignment="Center" VerticalAlignment="Center" >
        <Line Stroke="Red" X1="{Binding X1}" X2="{Binding X2}" Y1="{Binding Y1}" Y2="{Binding Y2}"/>
    </Grid>
</Grid>