我想實現「滾動以加載更多」功能。附加一個自定義綁定來檢查ScrollViewer verticalOffset屬性是否已更改。以下代碼用於在ListBox加載中註冊綁定。「ListenerOffset」屬性已通過「UserControl」登記
public static ScrollViewer scrollViewer;
public static DependencyProperty offsetChangeListener;
public static Binding binding;
private void initScrollViewerMonitor(object sender, RoutedEventArgs e)
{
//get the ScrollViewer from the ListBox
scrollViewer = GetDescendantByType(accountHistoryList, typeof(ScrollViewer)) as ScrollViewer;
//attach to custom binding to check if ScrollViewer verticalOffset property has changed
if (binding == null || offsetChangeListener == null)
{
var binding = new Binding("VerticalOffset") { Source = scrollViewer };
offsetChangeListener = DependencyProperty.RegisterAttached(
"ListenerOffset",
typeof(object),
typeof(UserControl),
new PropertyMetadata(OnScrollChanged));
scrollViewer.SetBinding(offsetChangeListener, binding);
}
}
但是,當第二次重新加載ListBox時,會出現以下錯誤。
System.ArgumentException: '' ListenerOffset '屬性已經 通過 「用戶控件」 註冊'。
我可以在卸載時取消註冊嗎?
除此之外一個DependencyProperty場應該是靜態的,也有強制性的命名約定的ListenerOffset依賴屬性的支持字段應該被命名爲ListenerOffsetProperty。徹底閱讀[自定義依賴屬性](https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/custom-dependency-properties)和[附加屬性概述](https://docs.microsoft .COM/EN-US/DOTNET /框架/ WPF /高級/連接 - 屬性 - 概述)。 – Clemens