2014-09-24 5 views
0

저는 XAML에 어려움을 겪고 있습니다! 나는 3 개의 행을 가지며, 중간 행 이외에 페이지의 높이를 실제로 변경하지 않습니다. 중간 행에는 ListBox가 있습니다.ListBox에 scrollviewr 추가

화면의 크기에 따라 화면에서 세 번째 행을 밀어 내지 않으면 항목이 ListBox에 추가 될 때 두 번째 행의 높이가 커지고 싶습니다. 이 경우 ListBox에 스크롤 막대가 표시됩니다. 나는 이것을 어떻게 성취 할 수 있을지 확신하지 못합니다.

나의 연구에 따르면 Height we have Auto와 *가 있습니다. 컨트롤에 따라 자동으로 크기가 지정되고 *가 전체 간격을 채 웁니다. 나는 이들 중 어느 것이 실제로 필요한 것을 어떻게 볼 수없는 ...

다음은 UserControl의 코드입니다. 이 UserControl은 부모 TabControl에서 렌더링됩니다.

내 노력은가 확장되지 않으므로 옵션은 고정 높이를 설정하지 않는 내가 그리드의 높이를 설정하면 편집

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 

     <StackPanel Grid.Row="0"> 
       <TextBlock Text="[?] Source directory" /> 
     </StackPanel> 

     <ListView ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding Folders}" Grid.Row="1" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         //data template code 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListView> 

      <StackPanel Grid.Row="2"> 
        <Button Content="Save" /> 
      </StackPanel> 

    </Grid> 

, 그것은 작동하지만, 모든 결의안. 그것은 Grid하고 RowDefinitions 때문에 Auto*으로 정의 된 부모의 Height을 모르기 때문에

+0

http://www.codeproject.com/Articles/30904/WPF-Layouts-A-Visual-Quick-Start –

+0

그래서 두 개의 StackPanels가 위와 아래로 도킹되도록하고 ListView를 사용하려면 화면의 중간 부분 전체? – estebro

+0

올바른 @estebro – MyDaftQuestions

답변

1

스크롤 막대가 표시되지 않습니다. 당신이 보여주기 위해 스크롤 막대를 원하는 경우

당신은

당신은 그것의 속성 LastChildFill=TrueDockPanel 레이아웃을 사용할 수, 명시 적으로 대안 Grid

<Grid Height="700"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.Row="0"> 
      <TextBlock Text="[?] Source directory" /> 
    </StackPanel> 

    <ListView ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding Folders}" Grid.Row="1" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        //data template code 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListView> 

    <StackPanel Grid.Row="2"> 
     <Button Content="Save" /> 
    </StackPanel> 

</Grid> 
+0

제공하는 코드가 작동하는 동안 문제는 다른 화면 해상도에 맞게 조정해야한다는 것입니다. 1024 * 768의 경우 700의 높이가 좋지만, 800 * 600의 해상도를 가진 사람은 없으며 해상도가 훨씬 높은 사람도 있습니다. 이 동적 인 것을 만들 수있는 방법이 정말로 있습니까? – MyDaftQuestions

+0

@MyDaftQuestions 다른 해상도를 위해 크기를 조정하려면 '그리드'가 원하는 높이를 계산하고 설정해야합니다. 첨부 속성 생성 및 계산 된 높이 값을 설정할 수 있습니다. 또는,'ViewBox'를 내부에서 사용해 볼 수는 있지만 작동하는지 잊어 버렸습니다. –

0

의 높이를 설정해야합니다. 그런 다음 각 요소 (StackPanels 및 ListView)에 DockPanel.Dock = [LOCATION] 속성을 추가해야합니다. ListView가 남은 공간을 차지하기를 원하기 때문에, <DockPanel>의 마지막 자식으로 ListView를 지정하십시오.

+0

흥미 롭다, 그것을 시도하자 – MyDaftQuestions

+0

좋은 소리. 도움이 필요하면 의견에 나를 태그하십시오. – estebro

+0

죄송합니다. 이것은 작동하지 않습니다. 난 노력 했어. 그것이 작동하게하는 유일한 방법은, III 포스트에 따라 컨트롤의 높이를 설정하는 것입니다. 문제는 이것이 다른 해상도로 확장되지 않는다는 것을 의미합니다. – MyDaftQuestions

관련 문제