Question: I'm using a the TreeView control and it scrolls automatically to left-align TreeViewItem when one of them is clicked. I've gone looking at my Styles and ControlTemplates, but I haven't found anything. Is there a default ControlTemplate that causes this? I want to disable it.

Answer: 
after spending some hours on this problem i found a solution that works for me.

brians solution to prevent the RequestBringIntoView event on a TreeViewItem from bubbling was the first step. unfortunately this also stops a treeviewitem to be shown if you change the selected item programmatically by

```
yourtreeview.SelectedItem = yourtreeviewitem

```

so, for me the solution is to modify the controltemplate of the treeview as follows:

```
<Style x:Key="{x:Type TreeView}" TargetType="TreeView">
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="SnapsToDevicePixels" Value="True" />
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeView">
                    <Border Name="Border" BorderThickness="0" Padding="0" Margin="1">
                        <ScrollViewer Focusable="False" CanContentScroll="False" Padding="0">
                            <Components:AutoScrollPreventer Margin="0">
                                <ItemsPresenter/>
                            </Components:AutoScrollPreventer>
                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

```

the "autoscrollpreventer" is:

```
using System;
using System.Windows;
using System.Windows.Controls;

namespace LiveContext.Designer.GUI.Components {
    public class AutoScrollPreventer : StackPanel
    {
    public AutoScrollPreventer() {

        this.RequestBringIntoView += delegate(object sender, RequestBringIntoViewEventArgs e)
        {
            // stop this event from bubbling so that a scrollviewer doesn't try to BringIntoView..
            e.Handled = true;
        };

    }
}

```

}

hope it helps..
It looks like I found a good clue on [MSDN](http://social.msdn.microsoft.com/forums/en-US/wpf/thread/9abff78f-481d-4db1-a545-c461f7d19200/):

> 
> Sounds like this is an interaction
>  with the scrollviewer and the focus
>  system.
> 
> 
> When an element is focused within a
>  ScrollViewer (which is part of the
>  TreeView template), the ScrollViewer
>  is instructed to make the element
>  visible. It automatically responds by
>  scrolling to the requested element.
> 
> 
> The methods inside of ScrollViewer
>  that handle these focus requests are
>  all private and / or internal so you
>  really can't get to them. I don't
>  think there's too much you can do in
>  this case; it's just how focus works.
> 
> 
> 

So, is that it? Surely there's a way to modify the TreeView template so that the ScrollViewer won't have this behavior...