</ItemsControl.ItemTemplate>
<ItemsControl.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<Grid>
<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)
{
}
}
当发生数据绑定时,会触发滚动更改事件。如何检查这是来自数据绑定的触发器,什么也不做,以及何时手动触发
答案 0 :(得分:0)
更新绑定时,它是滚动查看器的ItemsSource吗?
可能是绑定是添加或删除某些内容,导致滚动查看器更改其内容的大小。看看the scroll changed event args,有很多条件可以触发此事件。
您可能只想查看以下事件属性:
VerticalChange - 获取一个值,该值指示ScrollViewer的垂直偏移量的变化。
因此,请尝试仅在VerticalChange!= 0时执行操作。或者将调试器放在那里,看看是否有任何特定的事件类型要忽略,只有在绑定更改时才会发生,例如:
ExtentHeightChange - 获取一个值,该值指示ScrollViewerextent的高度变化。
当绑定更新时,可能只有非零,使滚动条更大(但不会更改滚动位置)。
这样的事情:
private void ChatScrollViewer_OnViewChangeEvent(ScrollChangedEventArgs Event)
{
if (Event.VerticalChange != 0)
{
ScrollViewer scrollViewer = Event.OriginalSource as ScrollViewer;
if (scrollViewer.VerticalOffset == 0)
{
}
}
}
希望有所帮助。