Ytt*_*ium 6 c# silverlight listbox
我希望从C#动态更改Silverlight ListBox的滚动位置,我需要知道如何从C#访问ListBox控件的ScrollViewer元素?
谢谢你们,杰夫
从继承自ListBox类的类中,您可以使用受保护的GetTemplateChild():
var myScrollviewer = myListBox.GetTemplateChild("ScrollViewer") as ScrollViewer;
如果要从ListBox外部访问它,那么通过属性公开ScrollViewer应该再次通过继承.
CAVEAT:如果您已设置自己的自定义模板,则此Scrollviewer可能不存在.您可以在上述方法中使用模板Scrollviewer名称而不是"ScrollViewer".
好问题。我没有找到直接执行此操作的方法,但通过查看 Silverlight Controls 项目(他们在某些类中的项目控件上使用滚动查看器)已经相当接近了。以下是获取它的方法,但它需要一个自定义列表框:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
可能有另一种方法来挂钩该事件(或另一种获取该面板的方法),如果您查看 ListBox 的模板,您将看到滚动查看器实际上名为“ScrollViewer”,但是 GetTemplateChild 方法受到保护,因此您可以仍然需要创建一个自定义类。
| 归档时间: |
|
| 查看次数: |
12940 次 |
| 最近记录: |