2011-10-06 30 views
0

在渲染的transfrom屬性上執行縮放轉換後,我得到相同的尺寸。這裏是代碼:在RenderTransfrom屬性上應用ScaleTransfrom後,新尺寸仍然相同

shape.Width = 100; shape.Height=100; 
shape.RenderTransform = new ScaleTransform(.5, .5); 
textBox.text = shape.ActualWidth + " " + shape.ActualHeight; 

我試着得到渲染的幾何邊界的寬度和高度,仍然是一樣的。我也試過LayoutTransfrom,仍然沒有工作。我做錯了什麼,任何幫助將不勝感激。

回答

0

嘗試設置LayoutTransform而不是RenderTransform。

+0

仍然得到同樣的事情。 – mihajlv

+0

您還需要等待轉換應用。即。在單獨的調度器消息中。嘗試在對Dispatcher.BeginInvoke(...)的調用中執行textBox.text分配 –

0

LayoutTransform和RenderTransform之間的主要區別在於應用轉換時。使用「渲染變換」時,在佈局過程中使用對象的全部大小,並且只有在完成對象變換後。其他元素不受此影響。在LayoutTransform中,對象在佈局階段已經被轉換,這意味着對於所有預期的目的,對象的邊界框都會改變。所有其他元素也適應這種變化。

既不會改變ActualWidth或ActualHeight,因爲這會影響被轉換的對象的內部佈局,因此渲染轉換操作無用。

<StackPanel> 
    <Border Name="OuterBorder1" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Yellow"> 
     <Border Width="100" Height="100" Background="Green" Name="Border1" /> 
    </Border> 
    <Button Content="Normal" Click="Normal_Click"/> 
    <Button Content="Layout Transform" Click="Layout_Click"/> 
    <Button Content="Render Transform" Click="Render_Click"/> 
    <TextBlock Text="{Binding Path=ActualWidth, ElementName=Border1}"></TextBlock> 
    <TextBlock Text="{Binding Path=ActualWidth, ElementName=OuterBorder1}"></TextBlock> 
</StackPanel> 

當你按下按鈕,下面的動作附加:

private void Normal_Click(object sender, RoutedEventArgs e) 
{ 
    Border1.RenderTransform = new ScaleTransform(1, 1); 
    Border1.LayoutTransform = new ScaleTransform(1, 1); 
} 

private void Layout_Click(object sender, RoutedEventArgs e) 
{ 
    Border1.RenderTransform = new ScaleTransform(1, 1); 
    Border1.LayoutTransform = new ScaleTransform(0.5, 0.5); 
} 

private void Render_Click(object sender, RoutedEventArgs e) 
{ 
    Border1.LayoutTransform = new ScaleTransform(1, 1); 
    Border1.RenderTransform = new ScaleTransform(0.5, 0.5); 
} 

的OuterBorder1有一個覆蓋上

您可以在下面的例子中,我颳起了你看到這對齊以確保它適合圍繞物品。

正如你所看到的,RenderTransform不會改變尺寸。使用LayoutTransform時,變形元素的寬度保持不變,但圍繞它的容器受到影響。

0

嘗試並等到轉化完成後,我們可以通過快速1 miilisecond DoubleAnimation及其Completed事件來了解它。在這個事件處理程序中檢查新的尺寸。

<Button x:Name="MyButton" Content="A Button" 
    RenderTransformOrigin="0.5,0.5"> 
    <Button.RenderTransform> 
    <RotateTransform x:Name="AnimatedRotateTransform" Angle="0" /> 
    </Button.RenderTransform> 
    <Button.Triggers> 
    <EventTrigger RoutedEvent="Button.Click"> 
     <BeginStoryboard> 
     <Storyboard> 
      <DoubleAnimation 
      Storyboard.TargetName="AnimatedRotateTransform" 
      Storyboard.TargetProperty="Angle" 
      To="360" Duration="0:0:0.1" FillBehavior="Stop" 
      Completed="RenderTransform_Completed" /> 
     </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
    </Button.Triggers> 
</Button> 

代碼背後...

private void RenderTransform_Completed(object sender, EventArgs e) 
    { 
     textBox.text = AnimatedRotateTransform.Angle; 
    } 
相關問題