title: Windows Phone 7 ScrollViewer.HorizontalOffset not updating
body: <p>I created a quick example that places in image in a ScrollViewer, starts a DispatcherTimer and then prints out the ScrollViewer.HorizontalOffset every 200 ms.  From the example I noticed some strange behavior - if I grab the image and scroll around by small amounts, say 60 pixels or so, the HorizontalOffset value never changes.  Is there a reason that the ScrollViewer is not reporting its position correctly?</p>
  
  <p>EDIT: I also tried grabbing the ScrollBar (named "HorizontalScrollBar") in the ScrollViewer and checking its Value property but I get the same results.</p>
  
  <p>EDIT2: It appears this bug only happens on Mango build 7712 (even if the app is built for 7.0).  I'll close this out and hope that its fixed in the final build.</p>
  
  <p>Sample code.  On my machine I can drag the image for large extents without getting an update.  I seem to only get an update ever 120 or so increments of value.  I would like to get the update at least every 10-20 pixels.</p>
  
  <pre><code>&lt;Grid x:Name="LayoutRoot" Background="Transparent"&gt;
          &lt;ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" x:Name="Scroll"&gt;
              &lt;Image Source="Jellyfish.jpg" Stretch="None"/&gt;
          &lt;/ScrollViewer&gt;
      &lt;/Grid&gt;
  </code></pre>
  
  <p>MainPage.xaml.cs:</p>
  
  <pre><code>// Constructor
          public MainPage()
          {
              InitializeComponent();
  
              this.Loaded += (s, e) =&gt;
                  {
                      var scrollBar = Scroll.FindVisualChild("HorizontalScrollBar") as ScrollBar;
                      scrollBar.ValueChanged += (s1, e1) =&gt; Debug.WriteLine(DateTime.Now + " " + scrollBar.Value);
                  };
          }
  </code></pre>
  
  <p>ExtensionMethods.cs:</p>
  
  <pre><code>public static class ExtensionMethods
      {
          public static FrameworkElement FindVisualChild(this FrameworkElement root, string name)
          {
              FrameworkElement temp = root.FindName(name) as FrameworkElement;
              if (temp != null)
                  return temp;
  
              foreach (FrameworkElement element in root.GetVisualDescendents())
              {
                  temp = element.FindName(name) as FrameworkElement;
                  if (temp != null)
                      return temp;
              }
  
              return null;
          }
  
          public static IEnumerable&lt;FrameworkElement&gt; GetVisualDescendents(this FrameworkElement root)
          {
              Queue&lt;IEnumerable&lt;FrameworkElement&gt;&gt; toDo = new Queue&lt;IEnumerable&lt;FrameworkElement&gt;&gt;();
  
              toDo.Enqueue(root.GetVisualChildren());
              while (toDo.Count &gt; 0)
              {
                  IEnumerable&lt;FrameworkElement&gt; children = toDo.Dequeue();
                  foreach (FrameworkElement child in children)
                  {
                      yield return child;
                      toDo.Enqueue(child.GetVisualChildren());
                  }
              }
          }
  
          public static IEnumerable&lt;FrameworkElement&gt; GetVisualChildren(this FrameworkElement root)
          {
              for (int i = 0; i &lt; VisualTreeHelper.GetChildrenCount(root); i++)
                  yield return VisualTreeHelper.GetChild(root, i) as FrameworkElement;
          }
      }
  </code></pre>