13

わかりました、私はこの問題について狂ったように頭をかきむしっていて、それがどのように機能するかを調査するためにかなりの時間を費やしましたが、まだ答えを見つけていません。それと私が助けることができるかどうかを確認します。

基本的に私が抱えている問題はTreeView、アプリケーションに次のフォルダーがあることです。

Catalog

  Brands
    Nike
    Adidas
    Lactose

  Styles
    Sandles
    Trainers
    Boots

私が修正しようとしている問題は、フォルダーをドラッグすると (これは私のDragDropManagerクラスで処理されます)、上下にスクロールできません (単に素敵な一時停止の標識が表示されるだけです)。また、ツリービュー内で実際にスクローラーを見つけることができないため、それがどのように生成されているのかわかりません(これは私自身のソフトウェアではありません。最近会社で働き始めたので、コードに精通しておらず、他の誰も知りません知っているようです。)

一番上から一番下に何かを移動したい場合、これは問題です。

スクロールはドラッグしなくても問題なく動作します。

誰かが私のコードの一部を見たい場合は、実際に何を見せればよいかわからないので、お気軽にお尋ねください。

私はかなりの数の記事を読みましたが、頭を悩ませているだけです。

4

2 に答える 2

24

この動作を実現するための添付プロパティを作成しました。こちらの投稿をご覧ください-

ドラッグ アンド ドロップの実行中にコンテナを自動スクロールするための添付の動作

主なロジックは次のようなものです-

private static void OnContainerPreviewDragOver(object sender, DragEventArgs e)
{
    FrameworkElement container = sender as FrameworkElement;

    if (container == null) { return; }

    ScrollViewer scrollViewer = GetFirstVisualChild<ScrollViewer>(container);

    if (scrollViewer == null) { return; }

    double tolerance = 60;
    double verticalPos = e.GetPosition(container).Y;
    double offset = 20;

    if (verticalPos < tolerance) // Top of visible list? 
    {
        //Scroll up
        scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - offset);
    }
    else if (verticalPos > container.ActualHeight - tolerance) //Bottom of visible list? 
    {
        //Scroll down
        scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + offset);     
    }
}

SOに関する同様の質問(ただし、ほとんどはListBox/向けですListViewが、同様に機能するはずですTreeView)-

ドラッグ中の WPF リストボックスの自動スクロール

WPF ListView データバインド ドラッグ/ドロップ 自動スクロール

WPF ドラッグによるスクロールが正しく機能しない

于 2012-05-29T09:07:20.787 に答える