我无法在Silverlight App中使用SetTop属性Canvas。以下是重现问题的最小代码
from System import TimeSpan
from System.Windows import Application, Duration, PropertyPath
from System.Windows.Controls import Canvas, TextBlock
from System.Windows.Media import SolidColorBrush, Colors
from System.Windows.Media.Animation import (
DoubleAnimation, Storyboard, RepeatBehavior
)
root = Canvas()
root.Children.Clear()
root.Resources.Clear()
#root.Background = SolidColorBrush(Colors.Black)
parent = Canvas(Width = 100, Height = 100)
parent.Background = SolidColorBrush(Colors.Black)
parent.SetTop(root, 0)
parent.SetLeft(root, 0)
parent2 = Canvas(Width = 100, Height = 100)
parent2.Background = SolidColorBrush(Colors.Blue)
parent2.SetTop(root, 100)
root.Children.Add(parent)
Application.Current.RootVisual = root
“parent2.SetTop(root,100)”行改变了parent1的显示位置。
这种行为令人惊讶。我甚至没有将parent2添加为其中一个子对象仍然影响布局。
有人可以解释一下我做错了吗?
答案 0 :(得分:3)
我认为你正在使用SetTop“向后”。 SetTop在Canvas的子控件上设置附加属性,这样做:
parent2.SetTop(root,100)
将 root 的Canvas.Top属性设置为100(不是parent2)(因此也会移动root的所有子节点)。你应该做的是:
root.SetTop(parent, 0)
将父级的Canvas.Top属性设置为0。
有关MSDN的更多信息。