如何从另一个控件顶部可见的StackPanel进行控制

时间:2014-08-14 12:25:18

标签: c# wpf xaml stackpanel expander

在我的窗口中,我有一个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比现在更宽。怎么做?有可能吗?

2 个答案:

答案 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>

enter image description here