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時,變形元素的寬度保持不變,但圍繞它的容器受到影響。
仍然得到同樣的事情。 – mihajlv
您還需要等待轉換應用。即。在單獨的調度器消息中。嘗試在對Dispatcher.BeginInvoke(...)的調用中執行textBox.text分配 –