我有这段代码:
<TabItem Header="Card Details">
<ScrollViewer Name="cardDetailsScroll" MaxHeight="600" Width="Auto" Padding="10">
<StackPanel>
<Canvas Height="50">
</Canvas>
...
</StackPanel>
</ScrollViewer>
</TabItem>
每次我更改Tab然后返回时,ScrollViewer会重置其偏移量(到顶部)。使用StackPanel时我错了吗?或者我错过了什么?
感谢。
答案 0 :(得分:1)
Daniel Leiszen的第一个链接:
WPF的默认行为是卸载不可见的项目,包括卸载不可见的TabItems。这意味着当您返回选项卡时,TabItem会重新加载,任何未绑定的内容(例如滚动位置)都将被重置。
在我问之前,我曾想过这个解决方案, 我只想知道一些其他解决方案来帮助我提高知识水平:
private void cardDetailsScroll_Loaded(object sender, RoutedEventArgs e)
{
double offset;
if (cardDetailsScroll.Tag != null
&& double.TryParse(cardDetailsScroll.Tag.ToString(), out offset))
{
cardDetailsScroll.ScrollToVerticalOffset(offset);
}
}
private void cardDetailsScroll_Unloaded(object sender, RoutedEventArgs e)
{
cardDetailsScroll.Tag = cardDetailsScroll.VerticalOffset;
}
答案 1 :(得分:0)
答案 2 :(得分:0)
我在使用TabControl时遇到了类似的问题。每个选项卡都显示来自UserControl的图形,当我在选项卡之间切换时,滚动查看器在激活选项卡后滚动回原点。
我使用了Onfealive提出的类似方法。但是我使用了HorizontalOffset和VerticalOffset而不是Tag。
private void m_ScrollViewer_Loaded(object sender, RoutedEventArgs e)
{
m_ScrollViewer.ScrollToHorizontalOffset(m_HorizontalOffset);
m_ScrollViewer.ScrollToVerticalOffset(m_VerticalOffset);
}
private void m_ScrollViewer_Unloaded(object sender, RoutedEventArgs e)
{
m_HorizontalOffset = m_ScrollViewer.HorizontalOffset;
m_VerticalOffset = m_ScrollViewer.VerticalOffset;
}
这适合我,我认为这种方法更安全!