我在画布上有一些内容和Line
的边框。 Border +内容是可拖动的,Line
更新为随Border移动。我的问题是该行位于Border的顶部,因此在某些情况下它会阻止我的内容。我已经尝试设置ZIndex并在XAML中更改了它们的顺序,但它没有任何效果。我会冒险猜测是因为Line
不断被渲染,因为它改变了形状,并且出于某种原因输出到屏幕上方。有什么方法吗?
我的一些代码
XAML
<Canvas x:Name="canvas"
MouseDown="Canvas_MouseDown"
MouseUp="Canvas_MouseUp"
MouseMove="Canvas_MouseMove">
<Border BorderBrush="Aqua" BorderThickness="3" Padding="3" Name="bdr"
Background="{StaticResource GradientBackground}" Canvas.ZIndex="99"
MouseLeftButtonDown="MouseLeftBtnDown">
<Border.RenderTransform>
<TranslateTransform />
</Border.RenderTransform>
<button/>
</Border>
</Canvas>
<Polygon
Canvas.ZIndex="98"
Name="SpeechPoly"
Stroke="Aqua"
StrokeThickness="2"
Fill="{StaticResource GradientBackground}">
</Polygon>
C#
private void Dragging()
{
...
point = bdr.TransformToAncestor(this).Transform(new Point(0, 0));
myPoints.RemoveAt(1);
myPoints.RemoveAt(1);
myPoints.Add(new Point(p.X, p.Y + 50));
myPoints.Add(new Point(p.X, p.Y + 25));
SpeechPoly.Points = myPoints;
}
答案 0 :(得分:0)
废话处理将是确定线在边界上的位置(即右/左手侧,顶部/底部)并在边界处移动。
<强>已更新强>
if (p.X > myPoints[0].X)//right
{
if (p.Y + bdr.ActualHeight> myPoints[0].Y)//lower
{
myPoints.Add(new Point(p.X, p.Y + 50));
myPoints.Add(new Point(p.X, p.Y + 25));
}
else//higher
{
myPoints.Add(new Point(p.X, p.Y + bdr.ActualHeight- 50));
myPoints.Add(new Point(p.X, p.Y + bdr.ActualHeight - 25));
}
}
else if (p.X + bdr.ActualWidth > myPoints[0].X)//Middle
{
if (p.Y + bdr.ActualHeight > myPoints[0].Y)//lower
{
myPoints.Add(new Point(p.X + (bdr.ActualWidth / 2) + 25, p.Y));
myPoints.Add(new Point(p.X + (bdr.ActualWidth / 2), p.Y));
}
else if (p.Y + bdr.ActualHeight < myPoints[0].Y)//higher
{
myPoints.Add(new Point(p.X + (bdr.ActualWidth / 2) + 25, p.Y + bdr.ActualHeight));
myPoints.Add(new Point(p.X + (bdr.ActualWidth / 2), p.Y + bdr.ActualHeight));
}
}
else//left
{
if (p.Y > myPoints[0].Y)//lower
{
myPoints.Add(new Point(p.X + bdr.ActualWidth, p.Y + 50));
myPoints.Add(new Point(p.X + bdr.ActualWidth, p.Y + 25));
}
else//higher
{
myPoints.Add(new Point(p.X + bdr.ActualWidth, p.Y + 50));
myPoints.Add(new Point(p.X + bdr.ActualWidth, p.Y + 25));
}
}
<强>解强>
必须让我的Line
在与边框相同的画布中。现在似乎显而易见......感谢文森特!