C# 开始操作时停止滚动RichTextBlock
我有一个聊天,包含在RichTextBlock中C# 开始操作时停止滚动RichTextBlock,c#,mvvm,uwp,C#,Mvvm,Uwp,我有一个聊天,包含在RichTextBlock中 <ScrollViewer Name="ChatScroll" Margin="3" ManipulationMode="All"> <i:Interaction.Behaviors> <helpers:Scro
<ScrollViewer Name="ChatScroll"
Margin="3"
ManipulationMode="All">
<i:Interaction.Behaviors>
<helpers:ScrollHelper />
</i:Interaction.Behaviors>
<RichTextBlock>
<Paragraph>
<InlineUIContainer>
<ItemsControl ItemsSource="{Binding SelectedMedia.ChatMessages}"
Margin="0">
//SOME ELSE CODE
</ItemsControl>
</InlineUIContainer>
</Paragraph>
</RichTextBlock>
</ScrollViewer>
因此,当我收到新消息时,我需要在底部滚动,但如果我想查看聊天记录,我不需要向下滚动
我的想法是订阅事件操纵增量并取消向下滚动
public class ScrollHelper : Behavior<ScrollViewer>
{
private double height = 0.0d;
private ScrollViewer scrollViewer = null;
private bool IsBusy = false;
protected override void OnAttached()
{
base.OnAttached();
//IsBusy = false;
this.scrollViewer = this.AssociatedObject;
this.scrollViewer.LayoutUpdated += ScrollViewer_LayoutUpdated;
this.scrollViewer.ManipulationDelta += ScrollViewer_ManipulationDelta;
}
private void ScrollViewer_ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
{
var verticalOffset = scrollViewer.VerticalOffset;
var maxVerticalOffset = scrollViewer.ScrollableHeight; //sv.ExtentHeight - sv.ViewportHeight;
if (maxVerticalOffset < 0 ||
verticalOffset == maxVerticalOffset)
{
IsBusy = false;
}
else if (e.Delta.Translation.Y < 0 || e.Delta.Translation.Y > 0)
{
IsBusy = true;
}
}
protected override void OnDetaching()
{
base.OnDetaching();
if (this.scrollViewer != null)
{
this.scrollViewer.LayoutUpdated -= ScrollViewer_LayoutUpdated;
}
}
private void ScrollViewer_LayoutUpdated(object sender, object e)
{
if (!IsBusy)
{
if (Math.Abs(this.scrollViewer.ExtentHeight - height) > 1)
{
scrollViewer.ChangeView(0, scrollViewer.ExtentHeight, 1);
this.height = this.scrollViewer.ExtentHeight;
}
}
}
}
但是如果我滚动鼠标滚轮,那么事件就不起作用了?有没有办法订阅滚轮活动?或其他想法如何在查看故事时不向下发送滚动条
有没有办法订阅滚轮活动
鼠标滚轮事件将由滚动条在内部处理,因此我们无法直接订阅此事件,通常,我们可以订阅包含和的事件,我们可以比较FinalView和NextView的垂直偏移来判断向下或向上滚动