gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:35:25 24 4
gpt4 key购买 nike

我想在 slider 的帮助下调整 Canvas 上的圆圈大小。这个圆圈可以通过我在后面的代码中做的一些拖放操作在 Canvas 上移动,所以它的位置不是固定的。

我已将 slider 的值绑定(bind)到椭圆的高度和宽度。不幸的是,当我使用 slider 时,圆圈的大小会调整,其左上角(实际上是它所在矩形的左上角)在操作过程中保持不变。

我想用它的调整它的大小中心 点在操作过程中保持不变。在 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>

最佳答案

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

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

那有意义吗?

关于WPF:调整圆的大小,保持中心点而不是 TopLeft?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3423834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com