[英]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
覆盖按钮,我无法访问它们。 我尝试将ListBox
的Height
为MaxHeight="{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.