RenderTransform
きれいではありませんが、オブジェクトの位置をオフセットして中央に配置するために、異なる起点を持つネストされた s を使用する例を次に示します。
<UserControl x:Class="UrlTest.Center"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Canvas x:Name="LayoutRoot" Background="White">
<ContentControl Canvas.Top="100" Content="{Binding ActualWidth,ElementName=Center, StringFormat=Width \{0\}}"/>
<ContentControl Canvas.Top="120" Content="{Binding ActualHeight,ElementName=Center, StringFormat=Height \{0\}}"/>
<Grid x:Name="Center" RenderTransformOrigin="-.5,-.5" Canvas.Left="40" Canvas.Top="25">
<Grid.RenderTransform>
<ScaleTransform ScaleX="-1" ScaleY="-1"/>
</Grid.RenderTransform>
<Grid RenderTransformOrigin="-.25,-.25">
<Grid.RenderTransform>
<ScaleTransform ScaleX="-1" ScaleY="-1"/>
</Grid.RenderTransform>
<Ellipse Width="80" Height="50" Fill="Aquamarine"/>
<ContentControl FontSize="20" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">Center</ContentControl>
</Grid>
</Grid>
</Canvas>
</UserControl>
内側Grid
の s は変換を作成するためのものであり、外側の s は、その内側がそのサイズをその内側のコンテンツのサイズに設定Canvas
することを確認するためにあります。Grid