我有扩展器的UserControl。我在ListBox的主窗口中使用它,如下所示:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding MyCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<local:MyUserControl />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
表单加载后,UserControls正常填充空间。
在子用户控件扩展后,父容器的高度增长,如预期的那样。 After child user control expanded
如果我折叠了UserControl,则父容器中会留下空白区域。 Blank space left after child user control collapsed
如果主窗口收到调整大小事件,则所有空格都消失了。
我尝试在代码中使用Element.InvalidateVisual和Element.InvalidateMeasure,以及UpdateLayout,并使用DockPanel + DockPanel.Dock =&#34; Top&#34;来包装ListBox。对于小组的孩子。这没有效果。
另一方面,当我在代码中添加相同的UserControl时,这个人工制品消失了:父控件在子UserControl崩溃后崩溃了。但我需要XAML和UserControl作为DataTemplate。
请帮帮我。我确定必须有一些简单的解决方案,但我是XAML的新手,所以我对此有困难。
答案 0 :(得分:0)
解决方案是将父FrameworkElement
设置为HorizontalAligment
,如下例所示。
<StackPanel Background="Green" VerticalAlignment="Top" >
<Expander>
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<local:SomeUserControl></local:SomeUserControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
</StackPanel>
这适用于我的解决方案。
你的扩展器周围的FrameworkElements行为有点奇怪。如果您仍有一些问题,请显示更多相关信息。
答案 1 :(得分:0)
最后,我已经解决了这个问题。解决方案是将 ListBox 元素的 ScrollViewer.CanContentScroll 属性设置为 True 。