在我的窗口中,我有一个DockPanel
,其中StackPane
l在左侧持有自定义UserControl,在右侧有一个带有ListBox的Grid。我的UserControl包含一个带有ListBox的Expander
。
这是窗口中的代码:
<Window ...>
<DockPanel>
<StackPanel Width="100" DockPanel.Dock="Left">
<localp:NeumesPanel/> <!-- This is the UserControl -->
</StackPanel>
<Grid Margin="10" DockPanel.Dock="Right">
<ListBox .../>
</Grid>
</DockPanel>
</Window>
现在,当我扩展Expander时,部分内容并未显示,因为StackPanel的宽度比扩展器的内容宽度窄。像这样:http://screenshooter.net/100101493/xfcfxau
我想要实现的是让扩展器在我的网格上显示而不会影响网格的宽度 - 我不希望StackPanel比现在更宽。怎么做?有可能吗?
答案 0 :(得分:4)
Karl Shifflet做过类似的事:Expander with popup
解决方案摘要:
- 将
Expander
控件包裹在Canvas
控件内。Canvas
控制时,将Expander
高度限制在所需高度 崩溃了。- 将
Canvas
Panel.ZIndex
设置为高于所需的控件 叠加。- 设计并设计
Expander
Content
,使其看起来如此 比如PopUp
。
编辑:
在您的情况下,您需要在包含Panel.ZIndex
的{{1}}上设置StackPanel
。
答案 1 :(得分:0)
正如我在评论中提到的,使用StackPanel
可能会导致您出现问题,因为他们没有像Grid
那样调整孩子的大小。此外,StackPanel
不允许您显示其范围之外的内容。如果您将Canvas
属性设置为ClipToBounds
,则False
控件将会显示。
这是一个非常简单的示例,展示了如何执行此操作:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Canvas Background="Blue" Width="100" ClipToBounds="False">
<Border Background="Red" Width="200" Height="50" Panel.ZIndex="10" />
</Canvas>
</Grid>