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