private void WriteComment_SizeChanged(object sender, SizeChangedEventArgs e) { var actualHeight = ActualHeight; var verticalOffset = PostScrollViewer.VerticalOffset; var scrollableHeight = PostScrollViewer.ScrollableHeight; var writeCommentHeight = Math.Clamp( (int)e.NewSize.Height + (((int)e.NewSize.Height).IsEven() ? 0 : 1), _writeCommentMinHeight, _writeCommentMaxHeight); var scrollViewerHeight = actualHeight - writeCommentHeight; writeCommentHeight = Math.Floor(writeCommentHeight); scrollViewerHeight = Math.Ceiling(scrollViewerHeight); scrollViewerHeight += actualHeight - writeCommentHeight - scrollViewerHeight; PostGrid.RowDefinitions[0].Height = new GridLength( scrollViewerHeight); PostGrid.RowDefinitions[1].Height = new GridLength( writeCommentHeight); WriteCommentStackPanel.Height = writeCommentHeight; if (verticalOffset >= scrollableHeight - 20) { PostScrollViewer.ScrollToEnd(); } }
protected override async void OnEnter(object sender, RoutedEventArgs e) { base.OnEnter(sender, e); CommentsList.UpdateLayout(); UpdateLayout(); GC.WaitForPendingFinalizers(); GC.Collect(); if (!IsOnEnterActive) { e.Handled = true; return; } PostScrollViewer .ScrollToVerticalOffset(0.0); await UpdatePost() .ConfigureAwait(true); var draft = await StorageManager.GetPostCommentDraft( SettingsManager.PersistentSettings.CurrentUser.Id, ViewModel.CurrentPostData.Id) .ConfigureAwait(true); WriteComment.CommentText = draft.CommentText; WriteComment.IsAnonymous = draft.IsAnonymous; WriteComment.ContentTextBox.ScrollToEnd(); WriteComment.ContentTextBox.CaretIndex = draft.CommentText.Length; WriteComment.ContentTextBox.Focus(); if (PostScrollViewer.VerticalOffset >= PostScrollViewer.ScrollableHeight - 20) { PostScrollViewer.ScrollToVerticalOffset(0.0); } }
private async void CommentsList_CommentReply(object sender, RoutedEventArgs e) { if (!(sender is CommentsList)) { return; } if (!(e.OriginalSource is Comment comment)) { return; } var verticalOffset = PostScrollViewer.VerticalOffset; var scrollableHeight = PostScrollViewer.ScrollableHeight; var userNickname = !string.IsNullOrEmpty(comment.CurrentCommentData.User.Nickname) ? comment.CurrentCommentData.User.Nickname : "Unknown"; string replyText; switch (SettingsManager.AppSettings.CommentReplyModeEnum) { case CommentReplyModeType.Experimental: replyText = $">>> {userNickname}:\n\n" + $"{comment.CurrentCommentData.Text}\n\n" + ">>>\n\n"; break; case CommentReplyModeType.Legacy: default: replyText = $"{userNickname}, "; break; } var oldCaretIndex = WriteComment.ContentTextBox.CaretIndex; WriteComment.CommentText = replyText + WriteComment.CommentText; WriteComment.ContentTextBox.CaretIndex = replyText.Length + oldCaretIndex; WriteComment.ContentTextBox.ScrollToEnd(); WriteComment.ContentTextBox.Focus(); if (verticalOffset >= scrollableHeight - 20) { PostScrollViewer.ScrollToEnd(); } if (comment.CurrentCommentData.User.Id.HasValue && comment.CurrentCommentData.User.Id == SettingsManager.PersistentSettings.CurrentUser.Id) { return; } for (var i = 0; i < 2; ++i) { if (comment.CurrentCommentData.Likes.MyCount == 0) { await PostApi.AddLikeComment( SettingsManager.PersistentSettings.CurrentUser.Token, comment.CurrentCommentData.Id) .ConfigureAwait(true); } else { await PostApi.RemoveLikeComment( SettingsManager.PersistentSettings.CurrentUser.Token, comment.CurrentCommentData.Id) .ConfigureAwait(true); } if (comment.CurrentCommentData.Likes.MyCount == 0) { ++comment.CurrentCommentData.Likes.MyCount; } else { --comment.CurrentCommentData.Likes.MyCount; } } }