2011-10-26 2 views
0

내 wpf 응용 프로그램에서 흥미로운 문제가 있습니다.ScrollViewer 내의 패널

저는 mvvm을 사용하고 있으며 항목은 뷰 모델에 바인딩 된 콘텐츠 컨트롤 내에서 구성됩니다. 예를 들어

:

<Shell> 
    <ScrollViewer> 
    <StackPanel> 
     <ContentControl Content="{Bidning SomeVM}"/> 
     <ContentControl Content="{Bidning SomeVM2}"/> 
     <ContentControl Content="{Bidning SomeVM3}"/> 
    </StackPanel> 
    </ScrollViewer> 

</Shell> 

스택 패널이 잘 작동 하나 개의 항목 만 가지고 있다면,하지만 각 뷰 (해결 폼 VM)이 실제로 필요한 것보다 훨씬 더 많은 공간 (높이)를 필요로하는 일부 이유.

보기에는 문제가있는 경우 내부에 GroupBox와 DataGrid가 포함되어 있습니다.

내 문제는 무엇입니까?

+0

stackpanel을 (를) 제거하려고 시도 했습니까? – sll

+0

sll : 그럼 뭐야? 두 개 이상의 자식을 넣을 수 없습니다 .. –

답변

1

StackPanel은 기본적으로 Orientation의 방향으로 Infinity를 가진 자식을 측정하려고합니다.이 방향은 기본적으로 수직입니다. 따라서 항목의 크기가 무한대로 측정되므로 콘텐츠의 크기에 맞춰야합니다. DataGrid는 목록에있는 모든 항목에 대한 레코드를 할당, 측정 및 정렬합니다 (컨트롤에 제약 조건이 설정되지 않은 것으로 가정). 특정 제약 조건으로 측정되는 것에 의존하기 때문에 결과로 가상화가 수행되지 않습니다.

참고 : 다른 패널을 사용 했더라도 ScrollViewer 내의 ScrollContentPresenter가 스크롤을 수행하는 경우 무한대의 자식을 측정하므로이 동작이 발생할 수 있습니다. 이는 CanContentScroll이 false로 설정된 경우 또는 ItemsPanel은 IScrollInfo를 구현하지 않습니다.

어떤 유형의 레이아웃을 원하는지 확실하지 않아 구체적인 권장 사항을 제시하기가 어렵습니다.

+0

확대/축소를 위해 스크롤 뷰어를 사용하고 있습니다. 3 가지 내용이 보이는 화면 크기를 채우고 스크롤을 확대하면 작업이 나타나고 막대가 표시됩니다. –

+0

DataGrid 등에 스크롤 막대가있을 때 어떻게 작동하는지 알 수 있습니까? 그래서 분명히 당신은 3 개의 컨트롤이 각각 윈도우 높이의 3 분의 1을 갖기를 원합니다. 따라서 확대/축소 할 때 해당 컨트롤을 높이의 3 분의 1 인 것처럼 측정/정렬하지만 렌더 변형 등을 사용하여 각 내용을 확대하고 싶습니다. – AndrewS

+0

네, 이해합니다. –