2013-07-23 1 views
0

listbox.ScrollIntoView 메서드에 문제가 있습니다. 작동하지 않습니다. 다음 코드는 다음과 같습니다ListBox.ScrollIntoView는 지연 후에만 작동합니다.

// the listbox is binded to a "Thumbnails" property 
this.Thumbnails = new VirtualizableCollection<RecordingThumbnailItem>(this.thumbnailsProvider) { ItemsStep = this.ThumbnailsStep }; 
this.listBox.ScrollIntoView(this.Thumbnails[thumbnailToSelect]); 

나는 조금 나중에 ScrollIntoView를 호출하는 경우 (의 소스 후 500 밀리 초에서 인스턴스에 대해 정의 된 바인딩) 모든 작품 것으로 나타났습니다. 컨트롤이 특정 상태를 얻은 후에 ScrollIntoView이 호출되어야한다고 가정합니다. 그렇다면 어떻게 감지 할 수 있습니까? 어쩌면 어떤 이벤트를 사용하고 있을까요? 결국 오른쪽 끝의 마지막 항목을 표시하려면 가로 목록 상자를 적용해야하지만 평소와 같이 왼쪽 항목은 표시하지 않아야합니다. 어쩌면 다른 접근법이 있을까요?

+0

'ScrollIntoView' 메소드를 호출 할 때 지연이 없습니다. 아마 당신의 지연은'VirtualizableCollection'의 초기화에 의해 발생했을 것입니다. 새 프로젝트에로드하여 테스트 할 수있는 문제를 해결할 수있는 코드를 제공 할 수 있습니까? – Sheridan

+0

오해가 있습니다. 내 경우에는 ScrollIntoView가 전혀 작동하지 않습니다. 그러나 Thumbnails 초기화와 ScrollIntoView 호출 사이에 약간의 지연 (Thread Sleep)을하면 - 작동합니다. – vklu4itesvet

+0

우리가 @ vklu4itesvet을 가지고있는 문제는 여러분을 위해 그것이 작동하지 않고 우리를 위해서입니다. 따라서 코드에서 작동하지 못하게하는 코드가 있음을 제안합니다. 솔루션을 찾는데 도움이 필요하면 관련 코드를 제시해야합니다. 그것은 여러 가지 이유로 작동하지 않을 수 있습니다. – Sheridan

답변

1

각 항목을 나타내는보기가 아직 작성되지 않았으므로보기 은 화면에을 스크롤 할 수 없습니다.

Dispatcher을 사용하면 ScrollIntoView() 호출을 UI보다 낮은 우선 순위로 큐에 대기시킬 수 있습니다.이 호출은 UI 생성 시간을 보여줍니다.

이 시도 :

this.Thumbnails = new VirtualizableCollection<RecordingThumbnailItem>(this.thumbnailsProvider) { ItemsStep = this.ThumbnailsStep }; 
Dispatcher.CurrentDispatcher.BeginInvoke(
    DispatcherPriority.ContextIdle, 
    new Action(() => this.listBox.ScrollIntoView(this.Thumbnails[thumbnailToSelect]) 
); 

당신은 CurrentDispatcher는 UI가 아닌 다른 하나가 발생하는 경우 Application.Current.DispatcherDispatcher.CurrentDispatcher을 대체해야 할 수도 있습니다.

+0

고마워요! 내 경우에 한 가지 발언 DispatcherPriority.ApplicationIdle – vklu4itesvet

+0

그래,이 코드는 여전히 "이 때마다 작동하길"하는 효과가 있다는 의견이 있습니다. 제 경우에는 전문가의 확인을받는 것이 좋겠지 만이 문제를 해결하기 위해 노력하는 것 같습니다. – Steve

+0

에 대해 테스터에게 알릴 필요가 있습니다. – vklu4itesvet