WPF如何构建属性?
当我使用这种方法时,我发现了某种奇怪的行为:WPF如何构建属性?,wpf,Wpf,当我使用这种方法时,我发现了某种奇怪的行为: private Point GetPosition(Visual element) { GeneralTransform positionTransform = element.TransformToAncestor(this); Point areaPosition = positionTransform.Transform(new Point(0, 0)); return a
private Point GetPosition(Visual element)
{
GeneralTransform positionTransform = element.TransformToAncestor(this);
Point areaPosition = positionTransform.Transform(new Point(0, 0));
return areaPosition;
}
我在我的用户控件代码末尾调用了这个方法:
public Agenda()
{
InitializeComponent();
AgendaHelper.StyleGrid(GridAppointment, this.FindResource("btnStyle") as Style, 0);
AgendaScrolling.ScrollToVerticalOffset(YSCROLL_OFFSET);
timeSlot = 1200.0 / (24.0 * 4.0);
isRectDragging = false;
isRectResize = false;
isMouseDown = false;
TickNumber = 0;
Point test = GetPosition(AgendaScrolling);}
这个错误产生了:
我们在这里看到AgendaScrolling具有所有默认值,这非常令人惊讶。如果我调用相同的方法来响应MouseMove事件,并且一切正常,那么会发生非常混乱的情况
我的问题是:为什么AgendaScrolling在调用InitializeComponent后在CTOR中将其所有属性设置为默认值?如果这是正常行为,为什么这些属性在调用InitializeComponent后不保持此状态?(我提到AgendaScrolling的xaml代码包含一些UIElements,我也使用MVVM模式,但这似乎不是我困惑的根源)
编辑:
以下是异常消息:
“指定的可视对象不是此可视对象的祖先”
此
,即用户控件
,在添加到可视树之前不可能是可视祖先,并且框架无法在创建其实例之前将其添加到树中
将对GetPosition
的调用移动到已加载的事件处理程序:
public Agenda()
{
InitializeComponent();
...
Loaded += (s, e) =>
{
Point test = GetPosition(AgendaScrolling);
};
}
此
,即用户控件
,在添加到可视化树之前不可能是可视化祖先,框架在创建其实例之前也不能将其添加到树中
将对GetPosition
的调用移动到已加载的事件处理程序:
public Agenda()
{
InitializeComponent();
...
Loaded += (s, e) =>
{
Point test = GetPosition(AgendaScrolling);
};
}
您是否介意翻译异常消息,并将其作为文本包含在问题中。以下是异常:“指定的可视对象不是此可视对象的祖先”。您是否介意翻译异常消息,并将其作为文本包含在问题中。以下是异常:“指定的可视对象不是此可视对象的祖先“它成功了!我会记得构建VisualThree通常需要一些时间,所以最好小心与它交互。非常感谢你!它成功了!我会记得构建VisualThree通常需要一些时间,所以最好小心与它交互。非常感谢你!