</ItemsControl.ItemTemplate>
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" HorizontalAlignment="Center" FontWeight="Bold" Foreground="{StaticResource Accent}" Text="{Binding Path=Name , StringFormat={}{0:D}}" />
<ItemsPresenter Grid.Row="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ItemsControl.GroupStyle>
</ItemsControl>
<Interactivity:Interaction.Triggers>
<Interactivity:EventTrigger EventName="ScrollChanged" >
<Presentation:InvokeDelegateCommandAction Command="{Binding ChatScrollViewer_OnViewChange}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}" />
</Interactivity:EventTrigger>
</Interactivity:Interaction.Triggers>
</ScrollViewer>
private void ChatScrollViewer_OnViewChangeEvent(ScrollChangedEventArgs Event)
ScrollViewer scrollViewer = Event.OriginalSource as ScrollViewer;
if (scrollViewer.VerticalOffset == 0)
}
发生数据绑定时,会触发滚动更改事件。如何检查这是来自数据绑定的触发器,什么也不做,以及当触发时手动执行某些操作。
当绑定更新时,是滚动查看器的ItemsSource吗?
绑定很可能是在添加或删除某些内容,从而导致滚动查看器更改其内容的大小。看看 滚动更改事件args ,有很多条件触发了这个事件。
您可能只想检查事件属性,例如:
VerticalChange -获取一个值,该值指示ScrollViewer垂直偏移量的变化。
因此,当VerticalChange != 0时,只尝试执行您的操作。或者将调试器放在其中,查看是否存在您希望忽略的特定事件类型,这些事件类型仅在绑定更改时发生,例如:
ExtentHeightChange -获取一个值,该值指示ScrollViewerextent的高度变化。
当绑定更新时,可能仅为“无-零”,从而使滚动条更大(但不更改滚动位置)。
所以就像这样:
private void ChatScrollViewer_OnViewChangeEvent(ScrollChangedEventArgs Event)
if (Event.VerticalChange != 0)
ScrollViewer scrollViewer = Event.OriginalSource as ScrollViewer;