WPF:调整圆圈大小,保持中心点而不是TopLeft?

Jan*_*Jan 8 wpf xaml 2d resize centering

我想借助滑块在画布上调整一个圆圈.这个圆圈可以通过我在代码后面做的一些拖放操作在画布上移动,所以它的位置不固定.

我将滑块的值绑定到椭圆的高度和宽度.不幸的是,当我使用滑块时,圆圈的左上角点(实际上是它所在的矩形的左上角)在操作过程中保持不变.

我希望在操作期间使其中心点保持不变来调整它的大小.在XAML中有一个简单的方法吗?顺便说一下,我已经尝试过ScaleTransform,但它并没有完全按我的意愿行事.

谢谢你!:-)

一月

<Canvas x:Name="MyCanvas">

    <!-- this is needed for some adorner stuff I do in code behind -->
    <AdornerDecorator Canvas.Left="10"
                      Canvas.Top="10">
        <Ellipse x:Name="myEllipse"
             Height="{Binding Path=Value, ElementName=mySlider}"
             Width="{Binding Path=Value, ElementName=mySlider}"
             Stroke="Aquamarine"
             Fill="AliceBlue"
             RenderTransformOrigin="0.5 0.5">
            <Ellipse.RenderTransform>
                <RotateTransform Angle="{Binding Path=Value, ElementName=myRotationSlider}" />
            </Ellipse.RenderTransform>
        </Ellipse>
    </AdornerDecorator>

    <Slider x:Name="mySlider"
            Maximum="100"
            Minimum="0"
            Width="100"
            Value="10"
            Canvas.Left="150"
            Canvas.Top="10" />
    <Slider x:Name="myRotationSlider"
            Maximum="360"
            Minimum="0"
            Width="100"
            Value="0"
            Canvas.Left="150"
            Canvas.Top="50" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ngs 4

您可以通过 ValueConverter 将 Canvas.Left 和 Canvas.Top 绑定到您的高度和宽度。

具体来说(编辑):
为 Canvas.Left 和 Canvas.Top 分别创建一个属性并绑定到它们。
存储旧的宽度和高度值或旧的滑块值。
每当滑块改变时,通过减去存储的值得到增量变化“dx”。
(不要忘记更新存储的值...)
将 dx 添加到 Width 和 Height 属性。
并且,正如 Will 所说,将 dx/2*-1 添加到 Canvas.Left 和 Canvas.Top 属性中。

那有意义吗?