"もっと読み込みをスクロールする"機能を実装したいと思います。 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の2回目に再ロードされると、次のエラーが表示されます。
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/framework/wpf/advanced /添付プロパティの概要)。 – Clemens