2017-05-30 52 views
1

我有一個我想要旋轉的指南針的UserControl。我試圖從中心旋轉它,谷歌發現大量的參考使用RenderTransformOrigin="0.5,0.5"來實現這一點。但由於某些原因,這不起作用。它只是將角落作爲原點旋轉UserControl。使用RotateTransform從中心旋轉DrawingBrush

如果在UserControl中設置了CenterX="150"CenterY="150",它就可以工作。但是,我還必須將主窗口中的用戶控件的高度和寬度設置爲300.

如何在調用UserControl時設置高度和寬度設置而不從UserControl的中心點旋轉UserControl?我還希望在UserControl內部設置RenderTransformOrigin,而不是在調用它時。

(簡體)用戶控件XAML:

<UserControl x:Class="Poseidon.Views.CompassUserControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Poseidon.Views" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 

    <Grid> 
     <Grid.Resources> 
      <DrawingBrush x:Key="Compass_ver1"> 
       <DrawingBrush.Drawing> 
        <DrawingGroup> 
         <DrawingGroup.Children> 
          <GeometryDrawing Brush="#FF000000" Geometry="M 375.286,151.366C 486.487,151.366 576.634,241.513 576.634,352.714C 576.634,463.915 486.487,554.061 375.286,554.061C 264.085,554.061 173.939,463.915 173.939,352.714C 173.939,241.513 264.085,151.366 375.286,151.366 Z "/> 
          <GeometryDrawing Geometry="M 375.286,151.366C 486.487,151.366 576.634,241.513 576.634,352.714C 576.634,463.915 486.487,554.061 375.286,554.061C 264.085,554.061 173.939,463.915 173.939,352.714C 173.939,241.513 264.085,151.366 375.286,151.366 Z "> 
           <GeometryDrawing.Pen> 
            <Pen Thickness="0.755907" LineJoin="Round" Brush="#FF000000"/> 
           </GeometryDrawing.Pen> 
          </GeometryDrawing> 
          <GeometryDrawing Brush="#FFFFFFFF" Geometry="M 382.484,188.872C 472.971,192.847 543.103,269.425 539.128,359.912C 535.153,450.399 458.575,520.531 368.088,516.556C 277.601,512.58 207.469,436.003 211.444,345.516C 215.42,255.029 291.997,184.897 382.484,188.872 Z "/> 
          <GeometryDrawing Geometry="M 382.484,188.872C 472.971,192.847 543.103,269.425 539.128,359.912C 535.153,450.399 458.575,520.531 368.088,516.556C 277.601,512.58 207.469,436.003 211.444,345.516C 215.42,255.029 291.997,184.897 382.484,188.872 Z "> 
           <GeometryDrawing.Pen> 
            <Pen Thickness="0.755907" LineJoin="Round" Brush="#FF000000"/> 
           </GeometryDrawing.Pen> 
          </GeometryDrawing> 
          <GeometryDrawing Brush="#FF000000" Geometry="M 375.286,227.352L 389.511,202.805L 403.736,178.258L 375.286,178.258L 346.836,178.258L 361.061,202.805L 375.286,227.352 Z "/> 
          <GeometryDrawing Geometry="M 375.286,227.352L 389.511,202.805L 403.736,178.258L 375.286,178.258L 346.836,178.258L 361.061,202.805L 375.286,227.352 Z "> 
           <GeometryDrawing.Pen> 
            <Pen Thickness="0.755907" LineJoin="Round" Brush="#FF000000"/> 
           </GeometryDrawing.Pen> 
          </GeometryDrawing> 
         </DrawingGroup.Children> 
        </DrawingGroup> 
       </DrawingBrush.Drawing> 
      </DrawingBrush> 
     </Grid.Resources> 
     <Rectangle Fill="{StaticResource Compass_ver1}"> 
      <Rectangle.RenderTransform> 
       <RotateTransform Angle="{Binding FlightData.Value.Heading}" /> 
      </Rectangle.RenderTransform> 
     </Rectangle> 
    </Grid> 
</UserControl> 

主窗口XAML:

<local:CompassUserControl DataContext="{Binding Rov}" Height="100" Width="100" RenderTransformOrigin="0.5,0.5"/> 
+2

你'RotateTransform'被設置在'Rectangle'你的控制中,那麼你爲什麼要設置'RenderTransformOrigin'在' CompassUserControl'而不是在這個矩形上?將'RenderTransformOrigin'移動到'Rectangle',或將'RotateTransform'移動到'CompassUserControl'。 – Maxim

+0

感謝您的反饋。另一個「阿哈!」瞬間.. :-) – Oystein

回答

1

RenderTransformOrigin屬性獲得或設置的任何中心點變換由RenderTransform屬性聲明的,相對於邊界您應用了變換的元素:https://msdn.microsoft.com/en-us/library/system.windows.uielement.rendertransformorigin(v=vs.110).aspx

所以 - 建議b Ÿ@Maxim - 你應該設置Rectangle元素的RenderTransformOrigin屬性裏面你UserControl

<Rectangle Fill="{StaticResource Compass_ver1}" RenderTransformOrigin="0.5, 0.5"> 
    <Rectangle.RenderTransform> 
     <RotateTransform Angle="{Binding FlightData.Value.Heading}" /> 
    </Rectangle.RenderTransform> 
</Rectangle> 
+1

感謝您的反饋和信息。它像一個魅力。 – Oystein