Основное различие между LayoutTransform и RenderTransform заключается в применении преобразования. При использовании Render Transform полный размер объекта используется во время процесса макета, и только после того, как это закончено, объект трансформируется. Другие элементы не подвержены влиянию этого. С 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 ширина преобразованного элемента остается прежней, но на контейнер, окружающий его, влияют.