5

a内に要素を配置することに関する一般的な質問Canvasは、「要素の中心を(左上隅ではなく)配置する方法」です。

いくつかの解決策が提示されていますが、それらにはすべて欠点があります。

Canvas.Left要素をキャンバス内に配置して、要素の中心にCanvas.Top対応し、サイズと位置の両方のプロパティを他のプロパティにバインドできるようにする簡単な(XAMLのみの)方法はありますか?

WPFでこれを行う非常に簡単な方法を見つけました(Margin="-1000000" WPFでXAMLのみを使用して、キャンバス内の要素を(左上隅ではなく)中央に配置するように設定するだけです)が、Silverlight/WinRTでは機能しません。私が知っている他の唯一の方法は、計算ValueConverterを実行するために作成する必要がありx *= -0.5ます(XAMLのみではありません)。

4

1 に答える 1

2

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

于 2012-11-04T22:14:59.760 に答える