【发布时间】:2016-06-18 02:21:41
【问题描述】:
我有这种情况,我无法适应 UI 来填充空间。我会试着解释一下这个场景。
我有一个具有项目控件的主要用户控件。此项目控件具有扩展器项目。每个扩展器都使用一个用户控件(子控件)。这个基于数据的用户要么是一个文本框,要么是一个列表框。辅助UC中文本框/列表框中的数据在运行时从数据库中异步检索
我想要的是当我在项目控件中有多个项目时,我会看到多个扩展器标题。如果辅助用户控件应该显示一个文本框,那么我希望它展开到文本框的高度(+一些边距)。其他同级扩展器应保持折叠和可见。
但是当次要用户控件应该显示一个列表框时。我希望扩展器仅扩展到可用空间,并且内部列表框在需要时具有滚动条。同级扩展器应该被折叠并且标题可见。展开的扩展器内容应该只占用可用空间。
发生的情况是,如果我在单击扩展器时有一长串值,它就会下降并且不适合可用空间。它只是将所有东西向下推,不适合可用空间。如果项目较少,它只会扩展到项目的可用高度。这是不希望的。无论如何,如果它是一个列表框,它应该占据可用空间(无论它是否有项目)。
我已尝试将 Stack Panel 和 Dock Panel 作为 ItemsPanelTemplate。堆栈面板只是将列表向下推,同级扩展器不再可见。当我单击扩展器时,堆栈面板也不平滑。它只是创建闪烁的动画。万一或Dock Panel,当我展开时,就UI而言,它是流畅的体验,但它总是只显示一个项目(不管你有多少项目,我只看到一个扩展器)
我想要的行为如下:
假设扩展器 1 和 3 包含列表框,而扩展器 2 包含文本框
All Collapsed
===================
Expander1 - {collapsed}
Expander2 - {collapsed}
Expander3 - {collapsed}
.
.
. { blank}
.
.
------------------------------
Expander 1 Expanded
===================
Expander1 - {expanded}
.
.
. { expander content}
.
.
Expander2 - {collapsed}
Expander3 - {collapsed}
------------------------------
Expander 2 Expanded
===================
Expander1 - {collapsed}
Expander2 - {expanded}
. {expander content}
Expander3 - {collapsed}
.
.
. { blank}
.
------------------------------
Expander 3 Expanded
===================
Expander1 - {collapsed}
Expander2 - {collapsed}
Expander3 - {expanded}
.
.
. {expander content}
.
.
------------------------------
Note : at any given time frame only one expander would be expanded, others collapsed.
下面是我的代码。任何建议都会有很大帮助。
问候, Girija Shankar
<UserControl x:Class="FilterWKPS.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:local="clr-namespace:Sample"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ItemsControl ItemsSource="{Binding FuncData}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Caption}"
ExpandDirection="Down" HorizontalAlignment="Left" IsExpanded="{Binding ShowHide}">
<Expander.HeaderTemplate>
<DataTemplate>
<TextBlock Foreground="Black" Text="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=Header}"
Width="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=ActualWidth}">
</TextBlock>
</DataTemplate>
</Expander.HeaderTemplate>
<local:UCFunc DataContext="{Binding DataContext.FuncVM, RelativeSource={RelativeSource AncestorType={x:Type Grid}}}"/>
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>
【问题讨论】:
标签: c# wpf xaml layout itemscontrol