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에 후크가 같은
https://go4answers.webhost4life.com/Example/scrollviewer-scrolltohorizontaloffset-51429.aspx –