滚动到列表框wp7的底部

Sev*_*ays 2 c# silverlight listbox scrollviewer windows-phone-7

我有很多项目(0-100)最终需要滚动到包含它的Listbox的底部.我试过:

ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Auto);
            listmy.SelectedItem =  listmy.Items.Count-1;
            listmy.ScrollIntoView(listmy.SelectedItem);
            ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Disabled);
Run Code Online (Sandbox Code Playgroud)

但是这对我不起作用.scrollviewer包装了列表框和文本框.(列表框垂直滚动处于禁用状态).UPD xaml:

<Grid>

    <ScrollViewer Name="_ScrollViewer" VerticalScrollBarVisibility="Auto">
        <StackPanel Name="stackPanel" Height="auto">
          <ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled"  x:Name="listmy">
            <ListBox.ItemTemplate>
              <DataTemplate>...
Run Code Online (Sandbox Code Playgroud)

和cs:

listmy.ItemsSource = ((App)Application.Current).DIALOG;
        ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Auto);
        listmy.SelectedIndex =  listmy.Items.Count-1;
        listmy.ScrollIntoView(listmy.SelectedItem);
        ScrollViewer.SetVerticalScrollBarVisibility(listmy, ScrollBarVisibility.Disabled);
Run Code Online (Sandbox Code Playgroud)

Gon*_*ing 5

我收集你实际上想要确保ListBox的ScrollBar始终完全滚动到底部.其他解决方案只是确保最后一行是可见的(不一样).

要获得您想要的效果,您可以创建一个简单的子类ListBox,如下所示:

    using System.Windows.Controls;
    namespace ScrollBarTest
    {
        public class CustomListBox : ListBox
        {
            public void ScrollToBottom()
            {
                var scrollviewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
                scrollviewer.ScrollToVerticalOffset(scrollviewer.ScrollableHeight);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

不要像在示例中那样使用外部ScrollViewer,只使用子类ListBox

只要你想滚动到最后一行,就调用ScrollToBottom()方法.

子类化的原因GetTemplateChildprotected无法从派生类外部访问.