【发布时间】:2011-11-30 12:23:15
【问题描述】:
我有一个带有以下 XAML 的用户控件:
<ScrollViewer>
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<RichTextBox>
<Paragraph>
<Run Text="{Binding}"/>
</Paragraph>
</RichTextBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
以及后面的代码:
public partial class MainPage {
public MainPage() {
InitializeComponent();
Items = new ObservableCollection<string>(Enumerable.Range(0, 100).Select(x => "some text"));
DataContext = this;
}
public ObservableCollection<string> Items { get; set; }
}
当此代码运行时,ScrollViewer 的垂直滚动条会下降到底部。但是,如果我在 RichTextBox 中删除 Run 中的绑定并对文本进行硬编码:
<Run Text="some text"/>
现在滚动条停留在顶部(如我所料)。
这是一个错误吗?如果不是,那是怎么回事?我该如何解决这个问题(注意:这是简化的 XAML,我需要 ScrollViewer,因为 ListBox 实际上是在一个网格中)?
【问题讨论】:
-
嗨,可能有点傻 - 但 ListView 可以在没有滚动查看器的情况下滚动其内容 - 如果您将 ListView 直接嵌套到网格中,它将显示垂直滚动条并且不会滚动至底部。你也可以劫持 ItemsPanel。
-
Silverlight 没有 ListView 控件。我怀疑即使这样做也会在模板中使用 ScrollViewer。
-
对我来说似乎是一个错误。对于它的价值,如果您将 RichTextBox 替换为 TextBlock(并将 {Binding} 保留在其中),则滚动查看器会正常运行并保持在顶部。因此,出现问题的是 RichTextBox 和绑定内容的组合。
-
我还尝试摆脱滚动查看器并使用 StackPanel(而不是 VirtualizingStackPanel)覆盖 ItemsPanelTemplate,结果是完全相同的行为 - 绑定时滚动到底部。跨度>
标签: silverlight listbox richtextbox scrollviewer