Gute Frage. Ich habe keine Möglichkeit gefunden, es direkt zu machen, bin aber ziemlich nah an das Silverlight Controls-Projekt geraten (in einigen Klassen wird der Scrollviewer für das Elementsteuerelement verwendet). Hier ist, wie Sie es bekommen können, aber es erfordert eine benutzerdefinierte listbox:
public class TestBox : ListBox
{
private ScrollViewer _scrollHost;
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
var itemsHost = VisualTreeHelper.GetParent(element) as Panel;
for (DependencyObject obj = itemsHost; obj != item && obj != null; obj = VisualTreeHelper.GetParent(obj))
{
ScrollViewer viewer = obj as ScrollViewer;
if (viewer != null)
{
_scrollHost = viewer;
break;
}
}
base.PrepareContainerForItemOverride(element, item);
}
}
Es könnte eine andere Art und Weise sein, in diesem Fall Haken (oder eine andere Art und Weise, dass die Platte zu bekommen), wenn Sie bei der Vorlage sucht die ListBox Sie sehen, dass der Scroll-Viewer eigentlich "ScrollViewer" heißt, die GetTemplateChild-Methode ist jedoch geschützt, sodass Sie immer noch eine benutzerdefinierte Klasse erstellen müssen.
GetTemplateChild zeigt eine geschützte Methode. Ist das neu? Denn jetzt scheint es, dass deine Lösung nicht mehr funktioniert. http://msdn.microsoft.com/en-us/library/system.windows.controls.control.gettemplatechild(v=VS.95).aspx –
Nicht sicher, aber ich denke, Sie müssen eine Eigenschaft auf einem erstellen Klasse erben. Das habe ich am Ende getan, wenn ich mich richtig erinnere; Es war sowieso eine benutzerdefinierte Listenansicht. – Dann
Dies funktioniert tatsächlich nicht und sollte nicht versucht werden. GetTemplateChild ist eine geschützte Methode. – Kevin