簡體   English   中英

WPF:將ListBox的高度限制為網格行的高度

[英]WPF: Limit ListBox's height to the height of grid row

這是我的XAML的一部分:

<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覆蓋按鈕,我無法訪問它們。 我嘗試將ListBoxHeightMaxHeight="{Binding RelativeSource={RelativeSource AncestorType={x:Type Grid}}, Path=ActualHeight}" ,但它太多了 - 它占據了整個Grid Height ,也覆蓋了Buttons和他們下面的TextBoxes 我希望用Window動態調整整個事物的大小,以免被切斷。

我找不到合適的解決方案。 我該怎么辦?

這里的問題是你的堆棧面板,當沒有項目增長時,它會增長。 更好的布局是使用WPF Grid ,您可以在其中擁有兩行。 第二行將包含按鈕,然后該行可以給定固定大小,因為第一行可以設置為Width = *

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM