The code you posted works fine, but not right after the items are inserted into the ItemsControl. To make sure you give the control enough time to update itself, it's easier to use:
Dispatcher.BeginInvoke(() => lb.ScrollIntoView(lb.Items.Last());
where lb is a ListBox or any other ItemsControl.
(this works in the constructor of a Silverlight page, right after some code adding a bunch of items, just tested).
Note: the references were the default ones inserted by Visual Studio:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;