fix(desktop): keep position when scrolled up

This commit is contained in:
Anna 2020-11-21 15:18:38 -05:00
parent 952e10b9dc
commit 8f8f4b9bb3
1 changed files with 11 additions and 2 deletions

View File

@ -189,7 +189,9 @@ namespace XIVChat_Desktop {
// detect if scroller is at the bottom
var scroller = this.FindElementByName<ScrollViewer>(this.Tabs, "scroller");
var wasAtBottom = Math.Abs(scroller!.VerticalOffset - scroller.ScrollableHeight) < .0001;
var scrollerOffset = scroller!.VerticalOffset;
var scrollerHeight = scroller.ScrollableHeight;
var wasAtBottom = Math.Abs(scroller.VerticalOffset - scrollerHeight) < .0001;
// add messages to main list
this.Messages.InsertRange(this.insertAt, messages);
@ -206,13 +208,18 @@ namespace XIVChat_Desktop {
// scroll to the bottom if previously at the bottom
if (wasAtBottom) {
scroller.ScrollToBottom();
} else {
scroller.UpdateLayout();
var scrollDiff = scroller.ScrollableHeight - scrollerHeight;
scroller.ScrollToVerticalOffset(scrollerOffset + scrollDiff);
}
}
public void AddMessage(ServerMessage message) {
// detect if scroller is at the bottom
var scroller = this.FindElementByName<ScrollViewer>(this.Tabs, "scroller");
var wasAtBottom = Math.Abs(scroller!.VerticalOffset - scroller.ScrollableHeight) < .0001;
var verticalOffset = scroller!.VerticalOffset;
var wasAtBottom = Math.Abs(verticalOffset - scroller.ScrollableHeight) < .0001;
// add message to main list
this.Messages.Add(message);
@ -229,6 +236,8 @@ namespace XIVChat_Desktop {
// scroll to the bottom if previously at the bottom
if (wasAtBottom) {
scroller.ScrollToBottom();
} else {
scroller.ScrollToVerticalOffset(verticalOffset);
}
}