WPF的DependencyPropertyListener()

WPF的DependencyPropertyListener(),wpf,dependency-properties,Wpf,Dependency Properties,我想运营一个计划用于WPF的windows phone项目。 以下是链接: 通过重复代码,我发现WPF不知道此方法中的DependencyPropertyListener(): static void element_Loaded(object sender, RoutedEventArgs e) { FrameworkElement element = (FrameworkElement)sender; element.Loaded -= element_Loaded;

我想运营一个计划用于WPF的windows phone项目。 以下是链接:

通过重复代码,我发现WPF不知道此方法中的DependencyPropertyListener()

 static void element_Loaded(object sender, RoutedEventArgs e)
{
    FrameworkElement element = (FrameworkElement)sender;
    element.Loaded -= element_Loaded;
    ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(element);
    if (scrollViewer == null)
    {
        throw new InvalidOperationException("ScrollViewer not found.");
    }

    var listener = new DependencyPropertyListener();
    listener.Changed
        += delegate
        {
            bool atBottom = scrollViewer.VerticalOffset
                                >= scrollViewer.ScrollableHeight;

            if (atBottom)
            {
                var atEnd = GetAtEndCommand(element);
                if (atEnd != null)
                {
                    atEnd.Execute(null);
                }                    
            }
        };
    Binding binding = new Binding("VerticalOffset") { Source = scrollViewer };
    listener.Attach(scrollViewer, binding);
}
static void元素\u已加载(对象发送方、路由目标方)
{
FrameworkElement=(FrameworkElement)发送方;
element.Loaded-=element\u Loaded;
ScrollViewer ScrollViewer=FindChildOfType(元素);
如果(scrollViewer==null)
{
抛出新的InvalidOperationException(“未找到ScrollViewer”);
}
var listener=新的DependencyPropertyListener();
听众,改变了
+=代表
{
bool atBottom=scrollViewer.VerticalOffset
>=scrollViewer.ScrollableHeight;
如果(在底部)
{
var-atEnd=GetAtEndCommand(元素);
如果(atEnd!=null)
{
atEnd.Execute(null);
}                    
}
};
绑定绑定=新绑定(“垂直偏移量”){Source=scrollViewer};
附加(scrollViewer,绑定);
}

是否有办法绕过此对象?

您可以使用
DependencyPropertyDescriptor
侦听依赖属性值的更改

static void element_Loaded(object sender, RoutedEventArgs e)
{
    FrameworkElement element = (FrameworkElement)sender;
    element.Loaded -= element_Loaded;
    ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(element);
    if (scrollViewer == null)
    {
        throw new InvalidOperationException("ScrollViewer not found.");
    }

    var dpd = DependencyPropertyDescriptor.FromProperty(ScrollViewer.VerticalOffsetProperty, typeof(ScrollViewer));
    dpd.AddValueChanged(scrollViewer, delegate(object o, EventArgs args)
    {
        bool atBottom = scrollViewer.VerticalOffset
                       >= scrollViewer.ScrollableHeight;
        if (atBottom)
        {
            var atEnd = GetAtEndCommand(element);
            if (atEnd != null)
            {
                atEnd.Execute(null);
            }                   
        }
    });
}
static void元素\u已加载(对象发送方、路由目标方)
{
FrameworkElement=(FrameworkElement)发送方;
element.Loaded-=element\u Loaded;
ScrollViewer ScrollViewer=FindChildOfType(元素);
如果(scrollViewer==null)
{
抛出新的InvalidOperationException(“未找到ScrollViewer”);
}
var dpd=DependencyPropertyDescriptor.FromProperty(ScrollViewer.VerticalOffsetProperty,typeof(ScrollViewer));
AddValueChanged(scrollViewer,委托(对象o,事件args args)
{
bool atBottom=scrollViewer.VerticalOffset
>=scrollViewer.ScrollableHeight;
如果(在底部)
{
var-atEnd=GetAtEndCommand(元素);
如果(atEnd!=null)
{
atEnd.Execute(null);
}                   
}
});
}