あなたはVerticalOffset
プロパティの値を取得し、その後SetVerticalOffset
メソッドを呼び出すことができるように内部的にListBox
で使用されているScrollViewer
のホールドを取得する必要があります。
これは、ListBox
から内部構造を構成するビジュアルツリーを介して到達する必要があります。
は、私は(私はブログ上でこれを置く、私はそれを繰り返し続けるちゃたので)あなたのプロジェクトに追加する必要があり、この便利な拡張クラスを使用します -
public static class VisualTreeEnumeration
{
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root, int depth)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
if (depth > 0)
{
foreach (var descendent in Descendents(child, --depth))
yield return descendent;
}
}
}
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
return Descendents(root, Int32.MaxValue);
}
public static IEnumerable<DependencyObject> Ancestors(this DependencyObject root)
{
DependencyObject current = VisualTreeHelper.GetParent(root);
while (current != null)
{
yield return current;
current = VisualTreeHelper.GetParent(current);
}
}
}
この利用可能でListBox
(とその他のすべてのUIElements)は、いくつかの新しい拡張メソッドDescendents
とAncestors
を取得します。私たちはそれらをLinqと組み合わせてものを探すことができます。この場合、次を使用できます。 -
ScrollViewer sv = SomeListBox.Descendents().OfType<ScrollViewer>().FirstOrDefault();
ありがとうございました!私はコントロールのメーキャップがこのようにナビゲートできることに気づいていませんでした。 –
その情報をいつどのように使用するのか分かりますか?どのようにしてページは、それが束縛の束を飛び越えずに墓石から復元されていることを知っていますか? – Roger
@Roger:このMSDNのトピックを読んでください:http://msdn.microsoft.com/en-us/library/ff967548(v=VS.92).aspx – AnthonyWJones