Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何解决涉及可折叠区域的布局方案?_Wpf_Xaml - Fatal编程技术网

Wpf 如何解决涉及可折叠区域的布局方案?

Wpf 如何解决涉及可折叠区域的布局方案?,wpf,xaml,Wpf,Xaml,我有下面的布局问题最好在这里解释(为粗糙的插图道歉) 假设每个控件都作为单独的用户控件实现 我想要这样的行为,即展开右上角(绿色)控件将在视图中呈现一个比初始(绿色)控件宽度更宽的展开区域,并直接显示在其下方,宽度等于第一行中的两个控件(例如colspan of 2),同时按下其下的所有内容 假设最初有一个包含2行的网格。第一行是一些控件,第二行是可扩展控件-第二行可以有任何可以填充colspan 2的内容。可以是另一个布局容器或包含任何内容的用户控件,等等 如果绿色可扩展控件是一个用户控件,

我有下面的布局问题最好在这里解释(为粗糙的插图道歉)

假设每个控件都作为单独的用户控件实现

我想要这样的行为,即展开右上角(绿色)控件将在视图中呈现一个比初始(绿色)控件宽度更宽的展开区域,并直接显示在其下方,宽度等于第一行中的两个控件(例如colspan of 2),同时按下其下的所有内容

假设最初有一个包含2行的网格。第一行是一些控件,第二行是可扩展控件-第二行可以有任何可以填充colspan 2的内容。可以是另一个布局容器或包含任何内容的用户控件,等等

如果绿色可扩展控件是一个用户控件,我需要做什么才能获得我描述的这种行为

我想我需要设置容器的Grid.Row和Colspan附加属性,这些属性表示从用户控件内部扩展的内容(?)到用户控件所在的布局网格?(但是,我如何将用户控件内部控件的attached属性设置为用户控件外部的布局容器——特别是当扩展内容本身位于用户控件内的网格内时)

即使我能做到这一点,这也是非常脆弱的,因为只有当控件位于网格布局容器中时,它才能工作


有什么想法吗?不必使用网格,但这似乎是解决它的自然/显而易见的方法?

我不久前也有类似的布局。这对我很有用:

  • 在绿色控件上,创建所需大小的依赖项属性。在本例中,我期望全宽(下矩形)和窄宽(上矩形)
  • 在顶级容器中,创建用于测量尺寸的栅格。你会得到这样的结果:

    <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);(请参见关于设置附着的道具)。