キャンバス上にさまざまな量の子要素があるキャンバスがあります。ドラッグ アンド ムーブ機能を作成していますが、どの子も移動していません。
if (blockClicked == false && canvasClicked == true)
{
if (isDrag == true)
{
double deltaV = e.GetPosition(null).Y - pot.Y;
double deltaH = e.GetPosition(null).X - pot.X;
double newTop = deltaV + (double)canv.GetValue(Canvas.TopProperty);
double newLeft = deltaH + (double)canv.GetValue(Canvas.LeftProperty);
Console.WriteLine("newTop: " + newTop);
Console.WriteLine("newLeft: " + newLeft);
this.canv.SetValue(Canvas.TopProperty, newTop);
this.canv.SetValue(Canvas.LeftProperty, newLeft);
Console.WriteLine("canv new top: " + canv.GetValue(Canvas.TopProperty));
Console.WriteLine("canv new left: " + canv.GetValue(Canvas.LeftProperty));
}
}
上記は私が使用しているコードです。外側の if ステートメントはフラグをチェックしているだけですが、内側の IF ステートメントは、マウスがドラッグされていると判断している場所です。マウス (ポット) のポイントを取得し、その移動量を測定し、キャンバスの値をその測定値に設定します。
ただし、キャンバス上の子要素はどれも移動しませんか? 誰かが私にこれがなぜなのか説明できますか?
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="canv"
ClipToBounds="False"
d:DesignHeight="0" d:DesignWidth="1180">
<Canvas.RenderTransform>
<ScaleTransform x:Name="scale"/>
</Canvas.RenderTransform>
<!--<Canvas x:Name="canv" Width="1000" Height="750" Canvas.Left="0" Canvas.Top="0">-->
<Rectangle x:Name="Rectangle"
Width="1180" Height="784" Stretch="Fill"
ClipToBounds="False">
<Rectangle.Fill>
<RadialGradientBrush RadiusX="0.763909" RadiusY="0.611915" Center="0.496313,0.50023" GradientOrigin="0.496313,0.50023">
<RadialGradientBrush.GradientStops>
<GradientStop Color="#00456487" Offset="0.489691" />
<GradientStop Color="#B3456487" Offset="0.90404" />
</RadialGradientBrush.GradientStops>
<RadialGradientBrush.RelativeTransform>
<TransformGroup />
</RadialGradientBrush.RelativeTransform>
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
</Canvas>
編集: 上記は、「canv」キャンバスに含まれる XAML です。
ピーター