Изменение угла UIElement

У меня есть этот код:

RotateTransform transform = myImage.RenderTransform as RotateTransform;
transform.Angle = 25.0;
myImage.RenderTransform = transform;

Который устанавливает Angle моего элемента Image. Это работает, но не так сильно, как я ожидал.

Мне просто интересно, устанавливается ли Angle на основе правого угла изображения? Итак, поворачивает ли он изображение на 25 градусов от правой стороны изображения?


person KTOV    schedule 12.10.2015    source источник
comment
Так разве вы не можете просто вывести это из результата? он вращается по часовой стрелке на Angle. она двигается не так сильно, как я ожидал -› попробуйте увеличить угол.   -  person King King    schedule 12.10.2015
comment
Во-первых, строка myImage.RenderTransform = transform; является избыточной, так как вы устанавливаете свойство Angle уже имеющегося преобразования. Поворот по умолчанию вокруг верхнего левого угла. Чтобы изменить это, вы можете либо установить RenderTransformOrigin элемента в относительных координатах (например, (0,5, 0,5) для центра), либо установить свойства CenterX и CenterY RotateTransform в абсолютных координатах.   -  person Clemens    schedule 12.10.2015


Ответы (1)


Угол поворота 360 градусов по часовой стрелке. Это означает, что 25 градуса сдвигают его, практически говоря, примерно к 1 часу. Если бы вы хотели указать вправо, это было бы 90 градусов. Прямо вниз будет 180 градусов.

введите здесь описание изображения

Есть смысл? Посмотри на это:

введите здесь описание изображения

Вот некоторый код, который поможет вам протестировать:

<StackPanel Width="200" Margin="0,50">
    <Grid Width="100" Height="100" Background="SteelBlue" RenderTransformOrigin=".5,.5">
        <UIElement.RenderTransform>
            <RotateTransform Angle="{Binding Value, ElementName=MySlider}" />
        </UIElement.RenderTransform>
        <Line HorizontalAlignment="Center" VerticalAlignment="Top"
                Stroke="Goldenrod" StrokeThickness="4"
                X1="2" X2="2"
                Y1="0" Y2="40" />
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White">
            <Run Text="{Binding Value, ElementName=MySlider}" />
            <Run Text="degrees" />
        </TextBlock>
    </Grid>
    <Slider x:Name="MySlider" Maximum="360" Minimum="0" Value="25" />
</StackPanel>

Будьте уверены и обратите внимание на бит RenderTransformOrigin=".5,.5". Это будет очень важно для вас, потому что определяет, где находится ось вращения. Значения от 0 до 1. Таким образом, 0,0 в основном сверху/слева, а 1,1 снизу/справа. Это делает .5,.5 прямо посередине.

Удачи!

person Jerry Nixon    schedule 13.10.2015