将 ListBox 限制为仅在其所在的面板增长时才增长,而不在列表中添加更多项时增长
本文关键字:列表 添加 ListBox | 更新日期: 2023-09-27 18:31:13
在xaml中,我有这个:
<!--The listing of the items-->
<ListBox DockPanel.Dock="Left" ItemsSource="{Binding View}"
IsSynchronizedWithCurrentItem="True"
SelectionMode="Single"
Width="{Binding Source={StaticResource ListWidth}}"
x:Name="lstBox">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding alabel}" />
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在列表框所在的同一个 DockPanel 中,我有另一个可以改变高度(但不是动态)的控件,我们称此控件为 B。因此,列表框和 B 位于一个用户控件中,我们称之为 Master。
当 Master 实例化时,B 的高度被设置,然后它不再变化。在我的窗口里,我可以有几个大师,有些比其他的更高。如果列表框占用与 B 相同的高度,则可以。如果 B 随着项目的添加而增长,这是不行的。
那么,从本质上讲,我如何实现以下目标:
- 仅当列表框由于
- 另一个控件的大小增加而增长时,列表框才能增长
- 如果我只是向列表框添加更多项,则列表框无法增长。
当我写这个问题时,我想到了答案。
解决方案是:
- 为控件 B 指定一个名称。
- 为列表框指定最小高度。
- 在列表框中,将其"高度"绑定为 B 的实际高度,并将模式绑定为 OneTimeOnly
因此:
<ListBox DockPanel.Dock="Left" ItemsSource="{Binding View}"
IsSynchronizedWithCurrentItem="True"
SelectionMode="Single"
Width="{Binding Source={StaticResource ListWidth}}"
Height="{Binding ElementName=controlB, Path=ActualHeight, Mode=OneTime}"
x:Name="lstBox">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding thing}" />
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这会导致 ListBox 的大小只有一次,并且是控件 B 的大小;然后在添加项时再也不会增长。