1

私のC#Windows 8メトロアプリでは、ScrollViewerの上にStackPanelを追加しました。StackPanelに水平方向にいくつかのコントロールを追加しました。すべてのコントロールがStackPanelの上に追加されたら、特定のコントロールまでスクロールして、そのコントロールを表示します(特定のコントロールにフォーカスを設定します)。

これが可能かどうか教えてください。ScrollViewerクラス参照を調べました。ScrollToHorizo​​ntalOffsetというメソッドがありますが、StackPanelに追加された特定のコントロールのオフセットを取得する方法がわかりません。

StackPanelには、その子のオフセットを返すそのようなメソッドはありません。

4

2 に答える 2

1

リスト内の特定のアイテムにスクロールできるので、可能であればListViewのようなものを見ることをお勧めします。しかし、それが実行可能でない場合は、このようなことを行うことができます...

function scrollTo(int childIndex)
{
            double offset = 0;
            for (int i = 0; i < childIndex; i++)
            {
                var element = stack.Children[1] as FrameworkElement;
                offset += element.ActualWidth + element.Margin.Left + element.Margin.Right;
            }

            if (offset > scroll.ActualWidth)
                scroll.ScrollToHorizontalOffset(offset - scroll.ActualWidth);
            else
                scroll.ScrollToHorizonalOffset(0);
}

scrollはscrollviewerであり、stackはスタックパネルです。水平レイアウトを想定しています。これはアイテムをスクロールウィンドウに表示するだけで、常に可能であるとは限らないため、左端までスクロールしません。

于 2012-08-27T14:22:40.700 に答える
0

スタックパネルは、要求されたスペースの量に応じてコントロールをレイアウトするため、コントロールの前にすべての子を反復処理し、それぞれが占めるスペースの量を計算することで、オフセットを計算できます。

于 2012-08-27T13:52:52.580 に答える