2010-11-09 43 views
58

我想將按鈕旋轉到90度,但它會因爲旋轉arount(0,0)而被剪裁。如果我不知道它的像素寬度(它是多個按鈕的模板),如何使它圍繞中心旋轉如何在XAML中圍繞控制中心旋轉

+1

您是使用RenderTransform還是LayoutTransform?即使沒有指定原點,90度的LayoutTransform似乎也能正常工作。 – grantnz 2010-11-09 09:51:05

+0

我正在使用LayoutTransform,並且按鈕位於Grid中,列寬設置爲auto。無論如何,正確的旋轉不起作用,因爲看起來網格設置的列寬等於高度的按鈕寬度inseatd。 – Poma 2010-11-09 09:56:58

+0

你可以發佈你的XAML嗎? – grantnz 2010-11-09 10:01:26

回答

40
<Button ...> 
    <Button.LayoutTransform> 
    <RotateTransform CenterX="0.5" CenterY="0.5" Angle="90"/> 
    </Button.LayoutTransform> 
</Button> 
+6

這個在Windows Phone 8 .NET 4.5 C#XAML應用程序中不適用於我。雖然@FrancescoDeVittori的工作。 – mishan 2014-12-29 14:19:47

88

您必須將控件的RenderTransformOrigin設置爲0.5,0.5。

例:

<Button RenderTransformOrigin="0.5, 0.5"> 
    <RepeatButton.RenderTransform> 
     <RotateTransform Angle="90"/> 
    </RepeatButton.RenderTransform> 
</RepeatButton> 
+7

這一個適用於我,儘管接受的答案不是。也許這裏RenderTransform和LayoutTransform有區別嗎? – TheSHEEEP 2013-08-16 11:27:56

+1

是的,這對我也適用,不接受答案。 – 2014-02-06 13:35:41

+1

從接受的答案LayoutTransform改變了我試圖旋轉的元素周圍的一切。設置RenderTransformOrigin並使用RenderTransform很好,謝謝! – 2015-05-20 00:27:57

2

我的理解是,原產地是不相關的一個LayoutTransform。

MSDN說:

設置的變換提供了強大的縮放和旋轉 能力。但是,LayoutTransform忽略了TranslateTransform 操作。這是因爲FrameworkElement的子元素 的佈局系統行爲會自動將縮放或旋轉元素的位置的任何偏移量校正到父元素的佈局和座標系 系統中的 位置。

和下列「正確」旋轉按鈕。

<Grid ShowGridLines="True"> 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <Button Grid.Row="1" Grid.Column="1">Excessively Long Button Still Ok 
     <Button.LayoutTransform> 
      <RotateTransform Angle="90" /> 
     </Button.LayoutTransform> 
    </Button> 
</Grid>