Wpf 如何解决涉及可折叠区域的布局方案?
我有下面的布局问题最好在这里解释(为粗糙的插图道歉) 假设每个控件都作为单独的用户控件实现 我想要这样的行为,即展开右上角(绿色)控件将在视图中呈现一个比初始(绿色)控件宽度更宽的展开区域,并直接显示在其下方,宽度等于第一行中的两个控件(例如colspan of 2),同时按下其下的所有内容 假设最初有一个包含2行的网格。第一行是一些控件,第二行是可扩展控件-第二行可以有任何可以填充colspan 2的内容。可以是另一个布局容器或包含任何内容的用户控件,等等 如果绿色可扩展控件是一个用户控件,我需要做什么才能获得我描述的这种行为 我想我需要设置容器的Grid.Row和Colspan附加属性,这些属性表示从用户控件内部扩展的内容(?)到用户控件所在的布局网格?(但是,我如何将用户控件内部控件的attached属性设置为用户控件外部的布局容器——特别是当扩展内容本身位于用户控件内的网格内时) 即使我能做到这一点,这也是非常脆弱的,因为只有当控件位于网格布局容器中时,它才能工作Wpf 如何解决涉及可折叠区域的布局方案?,wpf,xaml,Wpf,Xaml,我有下面的布局问题最好在这里解释(为粗糙的插图道歉) 假设每个控件都作为单独的用户控件实现 我想要这样的行为,即展开右上角(绿色)控件将在视图中呈现一个比初始(绿色)控件宽度更宽的展开区域,并直接显示在其下方,宽度等于第一行中的两个控件(例如colspan of 2),同时按下其下的所有内容 假设最初有一个包含2行的网格。第一行是一些控件,第二行是可扩展控件-第二行可以有任何可以填充colspan 2的内容。可以是另一个布局容器或包含任何内容的用户控件,等等 如果绿色可扩展控件是一个用户控件,
有什么想法吗?不必使用网格,但这似乎是解决它的自然/显而易见的方法?我不久前也有类似的布局。这对我很有用:
- 在绿色控件上,创建所需大小的依赖项属性。在本例中,我期望全宽(下矩形)和窄宽(上矩形)
- 在顶级容器中,创建用于测量尺寸的栅格。你会得到这样的结果:
<Grid x:Name="fullSize"> <ColumnDefinition/> <ColumnDefinition x:Name="halfSize"/> </Grid>
<foo:GreenControl
FullWidth={Binding ElementName=fullSize, Path=ActualWidth}
NarrowWidth={Binding ElementName=halfSize, Path=ActualWidth}
/>
现在,GreenControl可以将其宽度设置为所需的任何宽度,例如,在值更新的处理程序中。在我的例子中,我将XAML中的元素绑定到依赖项道具 好的开始!这就解决了获取全宽的问题。问题是,当我的绿色控件展开时,我还需要在其下方显示额外的展开内容(如下一个网格行),因此有两部分:初始的“最小”绿色控件仍在同一位置,然后是显示在其下方的扩展全宽版本,即固定的额外高度,还是取决于绿色控件中的某些内容?我会猜一个额外的行,然后让绿色控件跨越两行,并将额外行的高度绑定到绿色控件所需的高度。假设额外内容现在是固定高度的-下面是我的设想:您有一个UserControl..它位于窗口的网格中。此网格有3行-1行用于UserControl,第2行用于UserControl中的可扩展内容填充,第3行用于剩余的窗口内容。UserControl内部是另一个网格,其中包含扩展的内容(假设它位于Stackpanel中)。展开时,我希望在StackPanel上设置Grid.Row和Grid.Column附加属性,以引用窗口中UserControl之外的外部网格。问题是-如何设置它们?您可以执行Grid.SetColumn(mygrid,colvalue);Grid.SetColumnSpan(mygrid,spanvalue);(请参见关于设置附着的道具)。