Articles
This behavior brings you additional features to list controls. You can define to which item should be scrolled, you also define if the list automatically scrolls to the last item as soon the collection has changed and that the list scrolls to the selected item automatically after the selection changes.

Usage
<UserControl x:Class="DW.Interactivity.Demo.ScrollBehaviorControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Interactivity="http://schemas.my-libraries.de/wpf/interactivity">
<DockPanel Height="300">
<Button Content="Start/Stop" DockPanel.Dock="Bottom" Click="Button_Click" />
<ListBox ItemsSource="{Binding Items}"
Interactivity:ScrollBehavior.AutoScrollToLast="True" />
</DockPanel>
</UserControl>
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
namespace DW.Interactivity.Demo
{
public partial class ScrollBehaviorControl : UserControl
{
public ScrollBehaviorControl()
{
InitializeComponent();
DataContext = this;
Items = new ObservableCollection<string>();
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromMilliseconds(300);
_timer.Tick += new EventHandler(Timer_Tick);
}
private void Timer_Tick(object sender, EventArgs e)
{
Items.Add(Guid.NewGuid().ToString());
}
public ObservableCollection<string> Items { get; set; }
private DispatcherTimer _timer;
private void Button_Click(object sender, RoutedEventArgs e)
{
if (_timer.IsEnabled)
_timer.Stop();
else
_timer.Start();
}
}
}