अच्छा प्रश्न है। मुझे इसे सीधे करने का कोई तरीका नहीं मिला, लेकिन सिल्वरलाइट कंट्रोल प्रोजेक्ट को देखकर काफी करीब आया (वे कुछ कक्षाओं में आइटम नियंत्रण पर स्क्रॉलव्यूअर का उपयोग करते हैं)। यहाँ कैसे आप इसे प्राप्त कर सकते हैं, लेकिन यह एक कस्टम लिस्टबॉक्स की आवश्यकता है:
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);
}
}
वहाँ, उस घटना में हुक करने का एक और तरीका है (या एक और तरीका है कि पैनल प्राप्त करने के लिए) हो सकता है आप के लिए टेम्पलेट को देखें, तो लिस्टबॉक्स आपको स्क्रॉल व्यूअर को वास्तव में "स्क्रॉलव्यूयर" नाम दिया जाएगा, हालांकि GetTemplateChild विधि सुरक्षित है, इसलिए आपको अभी भी एक कस्टम क्लास बनाने की आवश्यकता होगी।
GetTemplateChild एक संरक्षित तरीका हो को दर्शाता है। क्या वह नया है? क्योंकि अब ऐसा लगता है कि आपका समाधान अब काम नहीं करेगा। http://msdn.microsoft.com/en-us/library/system.windows.controls.control.gettemplatechild(v=VS.95).aspx –
निश्चित नहीं है, लेकिन मुझे लगता है कि आपको एक संपत्ति बनाना होगा विरासत वर्ग। अगर मैं सही ढंग से याद करता हूं तो अंत में मैंने यही किया; यह वैसे भी एक कस्टम सूचीदृश्य था। – Dann
यह वास्तव में काम नहीं करता है और इसका प्रयास नहीं किया जाना चाहिए। GetTemplateChild एक संरक्षित विधि है। – Kevin