WPF:带扩展器的UserControl在Expander折叠后留空空间

时间:2016-10-24 20:55:49

标签: c# wpf xaml user-controls

我有扩展器的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的新手,所以我对此有困难。

2 个答案:

答案 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