我想将ListBox的高度绑定到StackPanel的高度,以便ListBox自身伸展,以便绿色区域不再可见。
当列表框中没有项目隐藏时。 当有项目时> 1 ListBox必须将其自身拉伸到add / del按钮,因此add / del按钮总是位于stackpanel的底部(不想使用dockpanel)
我该怎么做?我没有绑定错误?
<StackPanel x:Name="stack" Background="Green" DataContext="{Binding DocumentViewModelList/}" Orientation="Vertical" >
<ListBox SelectionMode="Single" VirtualizingStackPanel.IsVirtualizing="False"
SelectedItem="{Binding SelectedDocumentViewModel,Mode=TwoWay}"
Height="{Binding ElementName=stack,Path=Height}"
Width="Auto"
Focusable="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
Grid.Row="1"
Name="documentListBox"
BorderThickness="1"
ItemsSource="{Binding DocumentList}"
Visibility="{Binding ElementName=documentListBox,Path=HasItems, Converter={StaticResource boolToVisibilityConverter}}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Id}" />
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<!--<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>-->
</ListBox>
</StackPanel>
答案 0 :(得分:0)
要实现选择性高度(如果有项目x其他y)使用值转换器...也,我认为高度将是NaN所以尝试ActualHeight(糟糕的做法,但可能会工作)...使用像snoop这样的工具看到价值观!
他们使用堆叠面板的具体原因是什么?我的网格将更好地工作(StackPanel只提供所需的最小空间,网格可以根据需要提供尽可能多的空间)?
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListBox Grid.Row="1" />
<StackPanel Orientation="Horizontal" Grid.Row="1">
<!-- Buttons -->
</StackPanel>
</Grid>
答案 1 :(得分:0)
只需使用Grid而不是StackPanel:
<Grid x:Name="grid"
Background="Green"
DataContext="{Binding DocumentViewModelList}">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListBox Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" ..... />
<UniformGrid Grid.Row="1"
Rows="1"
HorizontalAlignment="Center"
VerticalAlignment="Bottom">
<Button Content="Delete" />
<Button Content="Add" />
<Button Content="Open" />
</UniformGrid>
</Grid>
ListBox只占用第一行的整个空间,而UniformGrid只占用底行,只占用所需空间(并使按钮的大小与奖励相同)。
不需要硬编码的宽度/高度值(或高度/宽度的任何绑定),也不需要值转换器。