我有一个递归定义的用户控件,它需要以下属性:
有两列
第一个包含一些文本周围的单个边框
第二列包含一堆这些相同类型的控件(递归部分)
如果第一列中的框比第二列中堆叠框的总高度短,则框应展开以使两列高度相同。
如果第二列的总高度小于第一列中的框,则第二列堆栈中的最后一项应展开,以使它们具有相同的高度。
例如,它可能看起来像这样:
好的,到目前为止,我所做的是创建一个水平堆栈面板,其中第一项是包含边框和文本的停靠面板......第二列是绑定到子列表的垂直堆栈面板,创建递归用户控件。 .. 像这样..
<StackPanel Orientation="Horizontal" Background="AliceBlue">
<local:TMRequirementView Requirement="{Binding Baseline}" />
<StackPanel Orientation="Vertical">
<ItemsControl ItemsSource="{Binding Requirements}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:TMGridView Baseline="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
要求如下所示:
<DockPanel>
<Border MinHeight="50"
BorderBrush="Black" BorderThickness="2">
<TextBlock Text="{Binding Description}"
TextWrapping="Wrap" Background="Transparent" Height="Auto" />
</Border>
</DockPanel>
现在,如果堆叠的列更高,这很有效,但如果第一列更高,它就不起作用了,我会得到间隙。知道如何处理这种相互的高度依赖性吗?
更新:因此,通过在右侧列堆栈面板周围添加边框,我能够看到堆栈面板实际上确实收到了最小高度更改。但是,即使有扩展空间,堆栈面板的子项也不会自动更新。如果我事先将堆栈面板的最小高度固定为较大的东西,孩子们就会填满。我需要弄清楚的是如何根据堆栈面板最小高度的变化来更新孩子的高度。