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通常需要一些时间,所以最好小心与它交互。非常感谢你!