2011-08-12 6 views
0

모든 정보를 화면에 표시 할 수 없으면 (즉, 창의 크기를 조절할 때) 페이지의 ScrollViewer를 표시하고 싶습니다. 그러나 ListBox는 스크롤을 가져 오지 않으며 내가 MaxSize를 갖도록 설정하지 않으면 페이지의 아래쪽까지 스케치를 얻는다. ListBox에 우선 순위를 부여하여 내가 만든 ScrollViewer를 표시하는 방법이 있습니까? 내가 지금 http://i.imgur.com/bEJcz.pngListBox가 ScrollViewer에 포함되어 있습니다.

내가 달성하고 싶은 무엇을 가지고,하지만 난이 목록 상자 here에 대한 MaxHeight입니다을 무엇을 사용

. 단지 별을 사용

<ScrollViewer HorizontalAlignment="Stretch" VerticalScrollBarVisibility="Auto" Name="scrollViewer1" VerticalAlignment="Stretch" > 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="Auto"/> 
      </Grid.RowDefinitions> 
      <ComboBox Grid.Row="0" Width="120" HorizontalAlignment="Left"></ComboBox> 
      <ListBox HorizontalAlignment="Left" Name="listBox" Width="120" Grid.Row="1" <!--MaxHeight="500"--> /> 
     </Grid>   
    </ScrollViewer> 
+0

이 목록 상자의 상단에서 ScrollViewer 및 MaxHeight입니다을 제거합니다. 또한 두 번째 행의 Height = "*"설정 –

+0

창 크기를 조정할 때마다 scrollviewer를 표시하기 때문에 위쪽 scrollviewer를 제거 할 수 없습니다. – lotusight

답변

1

<ScrollViewer HorizontalAlignment="Stretch" VerticalScrollBarVisibility="Auto" Name="scrollViewer1" VerticalAlignment="Stretch" > 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <ComboBox Grid.Row="0" Width="120" HorizontalAlignment="Left" ></ComboBox> 
      <ListBox HorizontalAlignment="Left" Name="listBox" Width="120" VerticalAllignment = "Top" Grid.Row="1"/> 
     </Grid> 

    </ScrollViewer> 

을 시도하거나 당신이

<Grid > 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <ComboBox Grid.Row="0" Width="120" HorizontalAlignment="Left" ></ComboBox> 
      <ListBox HorizontalAlignment="Left" Name="listBox" VerticalAlignment= "Top" Width="120" Grid.Row="1" ScrollViewer.VerticalScrollBarVisibility="Auto"/> 
     </Grid> 
+0

코드를 사용하지 않기 때문에 MaxHeight를 코드에서 제거했습니다. * 예상대로 작동하지 않습니다 : ( – lotusight

+0

업데이트 된 대답을보십시오 –

+0

내 의견에 제안했습니다 두 번째 솔루션;) –

0

말라가 ListBox에 MaxHeight입니다 설정할 시도 할 수 있습니다 :

여기에 몇 가지 내 마크 업입니다 귀하의 RowDefinitions에서 '*'표기법을 사용하면 귀하의 2 개의 컨트롤간에 상대적인 크기를 알 수 있습니다. correc 티.

+0

예. 방금 시도했지만 첫 번째 그림과 동일한 것을 반환합니다. – lotusight

+0

두 행 정의에 별표를 사용해야합니다. –

+0

두 행 정의 모두에서 별을 사용하면 첫 번째 이미지와 같은 결과를 얻습니다 – lotusight

1

귀하의 정의에 논리적 인 모순이 있습니다.

요구 사항 : "MaxHeight를 사용하지 않고 모든 정보를 화면에 표시 할 수없는 경우 페이지의 스크롤 뷰어를 표시하고 싶습니다."- 질문이 발생합니다. "어떻게 결정합니까? '모든 정보를 화면에 표시 할 수 없습니까?' 또는 "ListBox이 어느 시점에 성장을 멈추고 스크롤 막대를 보여야합니까?"

WPF \ Silverlight 레이아웃 관리 논리에서 원하는대로 정확하게 수행합니다. 목록 상자의 높이와 콤보 상자의 높이의 합이 스크롤 뷰어의 ViewportHeight보다 큰 경우 스크롤 막대가 나타납니다 . 스크롤 막대가 없으면 ListBox을 원하는 크기로 늘릴 수있는 경우에만 가능합니다.

2

나는이 문제가 오래되었다는 것을 알고 있지만 정확하게 동일한 문제가 있었지만 해킹을 조금 수정했습니다. 그러나 문제가 해결되지 않은 것보다 낫습니다.

StackPanel과 같은 것을 사용하면 패널이 보유한 요소에 맞춰 커지기 때문에이 경우에는 많은 부분을 읽었습니다. StackPanel을 Grid에 고정시키고 Column/Row의 MinHeight 및 MaxHeight를 설정하고 컨트롤을 제자리에 잠글 수 있기 때문에 정상적으로 정상적으로 작동합니다. ScrollView가 추가되자 마자 이런 종류의 문제가 발생합니다. 위의 대답은 문제를 잘 설명하지만 해결책이 없습니다.

StackPanel 대신 다양한 패널 유형을 시도했지만 모두 동일한 결과를 산출했습니다. 내 ListBox가 Grid 내부에 있기 때문에 GridBox의 MaxHeight를 컨트롤의 다른 값에 바인딩하여 ListBox의 성장을 막아야한다고 결정했습니다. 이 문제는 바로 바인딩 할 수있는 요소가 없으므로 찾고자하는 정확한 높이를 얻을 수 없다는 것입니다.

은 해킹을 입력

내 높이가 이상한 항상옵니다 오프 스크린 (리스트 박스 위의 라벨의 높이였다 36 개 픽셀이 너무 커서 사실에) 작성 단지 작은 조금 너무 커서.그래서 IValueConverter 구현 :

class HeightToAdjustedHeightConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var height = (double) value - 33d; 
     return height < 360d ? 360d : height; 
     //360 being the minimum height allowed for the listbox 
    } 

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
return null; 
} 

}

은 그 후 내가 한 모든이 MaxHeight입니다 구속력위한 변환기로 포함을 (당신이 당신의 UserControl을 이름을 지정하고 그 X에 결합 할 필요가 참고 : 이름) :

<Grid Grid.Column="0" 
    Grid.Row="1" 
    VerticalAlignment="Top" 
    ClipToBounds="True" 
    MaxHeight="{Binding ElementName=AdHocUserControl, Path=ActualHeight, Converter={StaticResource HeightToAdjustedHeightConverter}}"> 

내가 생각할 수있는 유일한 대안은 패널 중 하나를 확장하고 성장 동작을 시도하는 것입니다. 나는 이것이 해킹이라고 인정하지만 작동 할 것이다.

0

또 다른 해결책 :

<ScrollViewer HorizontalAlignment="Stretch" VerticalScrollBarVisibility="Auto" Name="scrollViewer1" VerticalAlignment="Stretch" > 
<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
<ComboBox Grid.Row="0" Width="120" HorizontalAlignment="Left"></ComboBox> 
<ScrollViewer x:Name="scrollViewer" Grid.Row="1" ScrollViewer.VerticalScrollBarVisibility="Disabled" > 
    <ListBox HorizontalAlignment="Left" Name="listBox" Width="120" Grid.Row="1" MaxHeight="{Binding ActualHeight, ElementName=scrollViewer}" ScrollViewer.VerticalScrollBarVisibility="Auto"/> 
    </ScrollViewer> 
</Grid>   

관련 문제