2016-09-05 4 views
1

의 높이 제한 목록 상자의 높이가 여기 내 XAML의 일부입니다 : 여기WPF : 그리드 행

<Grid HorizontalAlignment="Stretch" 
     Margin="10" 
     MaxHeight="{Binding Path=ActualHeight, 
      RelativeSource={RelativeSource AncestorType={x:Type Window}}}"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="1*"/> 
    <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <TabControl Grid.Row="0" MinWidth="270" HorizontalAlignment="Stretch"> 
    <TabItem Header="CPU"> 
     <StackPanel Orientation="Vertical" > 
     <ListBox Name="CPUListBox" 
       ItemsSource="{Binding CPUCounters, Mode=OneWay}" 
       SelectionMode="Multiple" 
       MaxHeight="{Binding RelativeSource={RelativeSource 
        AncestorType={x:Type Grid}}, Path=ActualHeight}" 
       BorderThickness="1" 
       BorderBrush="#FF8B8B8B" 
       SelectionChanged="CPUListBox_SelectionChanged" 
       ScrollViewer.VerticalScrollBarVisibility="Visible"> 
      <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock> 
       <Run Text="{Binding CounterName, Mode=OneWay}"/> 
       <Run Text="{Binding InstanceName, Mode=OneWay}"/> 
       </TextBlock> 
      </DataTemplate> 
      </ListBox.ItemTemplate>         
     </ListBox> 

     <Grid Name="CPUSelectButtonsGrid"> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 

      <Button Grid.Column="0" Name="CPUSelectAllButton" 
        Margin="0,10,0,0" 
        Click="CPUSelectAllButton_Click"> 
      <TextBlock Text="SELECT ALL"/> 
      </Button> 
      <Button Grid.Column="1" Name="CPUUnSelectAllButton" 
        Margin="0,10,0,0" 
        Click="CPUUnSelectAllButton_Click"> 
      <TextBlock Text="UNSELECT ALL"/> 
      </Button> 
     </Grid> 
     </StackPanel> 
    </TabItem> 

    <TabItem Header="Memory"> 
     <StackPanel Orientation="Vertical"> 
     <ListBox Name="RAMListBox" 
       ItemsSource="{Binding RAMCounters, Mode=OneWay}" 
       SelectionMode="Multiple" 
       BorderThickness="1" 
       BorderBrush="#FF8B8B8B" 
       SelectionChanged="RAMListBox_SelectionChanged"> 
      <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock> 
       <Run Text="{Binding CounterName, Mode=OneWay}" /> 
       <Run Text="{Binding InstanceName, Mode=OneWay}" /> 
       </TextBlock> 
      </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

     <Grid Name="RAMSelectButtonsGrid"> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 

      <Button Grid.Column="0" Name="RAMSelectAllButton" 
        Margin="0,10,0,0" 
        Click="RAMSelectAllButton_Click" > 
      <TextBlock Text="SELECT ALL"/> 
      </Button> 
      <Button Grid.Column="1" Name="RAMUnSelectAllButton" 
        Margin="0,10,0,0" 
        Click="RAMUnSelectAllButton_Click" > 
      <TextBlock Text="UNSELECT ALL"/> 
      </Button> 
     </Grid> 
     </StackPanel> 
    </TabItem> 
    </TabControl> 

    <StackPanel Grid.Row="1" 
       Orientation="Horizontal" 
       HorizontalAlignment="Right" 
       Margin="0,15,6,0"> 
    <TextBlock Name="NumberOfSelectionsTextBlock" Text ="0"/> 
    <TextBlock Text=" items selected"/> 
    </StackPanel> 
</Grid> 

'무엇을 잘못 : 것은 내가 TabControl의 각 탭에 ListBox 있습니다. ListBox의 요소 수가 많으면 ListBox 버튼이 표시되어 액세스 할 수 없습니다. 나는 ListBoxHeight에서 MaxHeight="{Binding RelativeSource={RelativeSource AncestorType={x:Type Grid}}, Path=ActualHeight}"으로 제한하려고 시도했지만 너무 많습니다. GridHeight, 그 아래에 ButtonsTextBoxes을 포함하고 있습니다. Window으로 전체 크기를 동적으로 조정하여 아무 것도 잘리지 않도록하십시오.

이 문제에 대한 적절한 해결책을 찾을 수 없습니다. 어떻게해야합니까?

+0

로 설정할 수 있습니다로 고정 된 크기 주어질 수있다? – gilmishal

+1

왜 스택 패널 대신 그리드를 사용하고 버튼 높이를 고정시키고 나머지를 목록에 표시합니까? – Muds

+0

@ 머드 - 내 문제가 해결되었습니다. 고맙습니다. 솔루션을 답으로 추가하면 올바른 것으로 확인합니다. 다시 한 번 감사드립니다! – Loreno

답변

0

여기에 문제가없는 항목이 커지면 커지는 스택 패널이 있습니다. 더 나은 레이아웃은 두 행을 가질 수있는 WPF Grid을 사용하는 것입니다. 두 번째 행은 버튼을 포함하고 행은 다음 당신은 내게는 버튼을 포함하고 있는가 방법을 정확하게의 이미지를 보여줄 수있는 첫 번째 행이 Width = *

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