2009-08-10 3 views
0

TabControl 안에 Scrollviewer가 있고 탭을 변경할 때 어떤 이유로 ScrollViewer가 HorizontalOffset12로 이동합니다. 내 ScrollViewer에는 다른 것들 중에서도 ListView가 있습니다 무제한의 높이. 그것은 이상한 레이아웃이지만 스크롤러 내부의 모든 것을 인쇄 할 수 있어야 ListView가 쉽게 스크롤 할 수있었습니다. WPF - ScrollToHorizontalOffset()이 호출 될 때 ScrollViewer가 스크롤되지 않습니다

그래서 나는있는 TabControl의 인 selectionchanged 이벤트에 다음 라인을 시도했다 : 그들은를 WriteLine()을 모두 호출 (12)를 인쇄

Console.WriteLine(Scroller.HorizontalOffset); 
Scroller.ScrollToHorizontalOffset(0); 
Console.WriteLine(Scroller.HorizontalOffset); 

그리고를 ... 또한 이동하지 않습니다,하지만 당신은 스크롤 할 수 있습니다 실제 UI에서.

누가이 이상한 행동을 일으키는 지 아는 사람이 있습니까?

나는 게시하기에 적합한 코드를 찾으려고 노력할 것이지만, 큰 프로젝트이며 샘플 솔루션에서 다시 생성하기 어려울 수도 있습니다.

기타 정보 :

  • 가 스크롤 수평으로 할 수있는 내용이 충분히 큰 경우 문제는 발생합니다.
  • 내 가로 및 세로 스크롤 막대 표시 여부는 자동이지만 숨김 또는 표시로 설정하면 문제가 계속 발생합니다.

UPDATE :

당신이있는 ScrollViewer 내부의 내 목록보기를 클릭하고 항목을 선택하면,이 같은 12 픽셀로에서 ScrollViewer 스크롤 오프셋. 내 문제는 내 ListView 포커스를 관련이있을 수 있습니까? 포커스를 받으면 ListView 자체에서 BringIntoView()를 호출합니까?

이 XAML은 문제가 재생하기 : XamlPad에서

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window11" Height="300" Width="300"> 
<TabControl> 
    <TabItem Header="Tab One"> 
     <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <ListBox Margin="25,0,0,0" Width="2000"> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>   
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      </ListBox> 
     </ScrollViewer> 
    </TabItem> 
    <TabItem Header="Tab Two"> 
     <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <ListBox Margin="25,0,0,0" Width="2000"> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem>   
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      <ListBoxItem>WOOT WOOT WOOT WOOT</ListBoxItem> 
      </ListBox> 
     </ScrollViewer> 
    </TabItem> 
</TabControl> 
</Window> 

슬랩이를 실행합니다. 탭 머리글을 클릭하고 ScrollViewer를 스크롤하여 스크롤하여 ListBox의 여백이 화면에서 어떻게 스크롤되는지 알아보십시오. 이 동작을 방지하거나 해결할 수있는 방법은 무엇입니까? 제 레이아웃은 제 경우에 꽤 묘하게 보이게합니다.

private void ListView_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e) 
{ 
    e.Handled = true; 
} 

꽤 간단한 해결책처럼 보인다 : 당신이 RequestBringIntoView에 후크가 같은

+0

https://go4answers.webhost4life.com/Example/scrollviewer-scrolltohorizontaloffset-51429.aspx –

답변

관련 문제