2015-10-12 8 views
1

У меня есть этот код:Изменение угла в UIElement

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

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

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

+0

Так вы не можете просто извлечь его из результата? он вращается по часовой стрелке на «Угол». * он не двигается так сильно, как я ожидал * -> поэтому попробуйте увеличить угол. –

+0

Сначала строка 'myImage.RenderTransform = transform;' является избыточной, поскольку вы устанавливаете свойство Angle уже существующего преобразования. Вращение по умолчанию расположено вокруг верхнего левого угла. Чтобы изменить это, вы можете либо установить «RenderTransformOrigin» элемента в относительные координаты (например, (0,5, 0,5) для центра), либо установить свойства «CenterX» и «CenterY» RotateTransform в абсолютных координатах. – Clemens

ответ

2

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

enter image description here

смысл Make? Посмотрите на это:

enter image description here

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

<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 ударом в центре.

Удачи!