【问题标题】:WPF: UserControl with Expander leave blank space after Expander collapsedWPF:扩展器折叠后带有扩展器的用户控件留下空白空间
【发布时间】:2017-03-06 18:15:38
【问题描述】:

我有带有扩展器的用户控件。我在 ListBox 的主窗口中使用它,如下所示:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
         ItemsSource="{Binding MyCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <local:MyUserControl />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

表单加载后用户控件正常填充空间。

在子用户控件展开后,父容器的高度按预期增长。 After child user control expanded

如果我折叠 UserControl,父容器中会留下空白空间。 Blank space left after child user control collapsed

如果主窗口得到调整大小事件,所有的空白空间都消失了。

我尝试在代码中使用 Element.InvalidateVisual 和 Element.InvalidateMeasure,还尝试使用 UpdateLayout,并使用 DockPanel + DockPanel.Dock="Top" 为面板的子项包装 ListBox。没有效果。

另一方面,当我在代码中添加相同的 UserControl 时,这个伪影消失了:父控件在子 UserControl 折叠后按我的需要折叠。但我需要 XAML 和 UserControl 作为 DataTemplate。

请帮帮我。我确信一定有一些简单的解决方案,但我是 XAML 的新手,所以我对此有困难。

【问题讨论】:

  • 你能包含有扩展器的usercontrol xaml吗?
  • @mathew-jibin 代码是: <stackpanel verticalalignment="Top" height="Auto"><expander><listbox scrollviewer.horizo scrollviewer.cancontentscroll="False " itemssource="{Binding MyCollection}"><listbox.itemtemplate><datatemplate><myusercontrol></myusercontrol></datatemplate></listbox.itemtemplate></listbox></expander></stackpanel>

标签: c# wpf xaml user-controls


【解决方案1】:

终于,我解决了这个问题。解决方法是将 ListBox 元素的 ScrollViewer.CanContentScroll 属性设置为 True

【讨论】:

    【解决方案2】:

    解决方案是将父级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 行为有点奇怪。如果您仍然有一些问题,您应该显示有关它的更多信息。

    【讨论】:

    • 不,它不起作用。扩展器在用户控件内部,而不是父控件。每个列表框的项目都显示为我的用户控件。如果需要,我稍后会在这里给出我的标记。
    • 终于,我解决了这个问题。解决方法是将 ListBox 元素的 ScrollViewer.CanContentScroll 属性设置为 True。
    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2013-11-12
    相关资源
    最近更新 更多