【问题标题】:Keeping WPF grids from getting out of parent bounds防止 WPF 网格超出父边界
【发布时间】:2012-06-08 07:38:36
【问题描述】:

在我的 UI 中,我有一个两列一行的大网格。在右列中,我有一个包含三行的网格,在最上面一行我有一个用户控件,在下面两行我有两个 Expander 对象,每个对象都包含一个 ItemsControl 和一个填充列表运行。有时,该列表会变得非常长,并且会从屏幕“溢出”到底部。

我想要做的是让用户看到两个扩展器,能够展开或折叠它们,同时保持它们都在视线范围内。我尝试将它们包装在 WrapPanels 或 StackPanel 中,但无济于事。

这里有一些代码可以帮助解释我的问题:

<Grid Grid.Row="1" x:Name="grid1">
<Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
</Grid.RowDefinitions>
<Expander Grid.Row="0" Header="Expander 1" x:Name="expander1" FontSize="14" IsExpanded="True">
    <Expander.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFC4C4C4" Offset="0" />
            <GradientStop Color="White" Offset="1" />
        </LinearGradientBrush>
    </Expander.Background>
    <ContentPresenter Content="{Binding ViewModel.OpenAlerts, ElementName=m_viewControl}" ClipToBounds="True"/>
</Expander>
<Expander Grid.Row="1" x:Name="expander2" Header="Expander 2" FontSize="14" IsExpanded="True">
    <Expander.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFC4C4C4" Offset="0" />
            <GradientStop Color="White" Offset="1" />
        </LinearGradientBrush>
    </Expander.Background>
    <ContentPresenter Content="{Binding ViewModel.ClosedAlerts, ElementName=m_viewControl}" ClipToBounds="True"/>
</Expander>
</Grid>

我们将不胜感激任何帮助或提示!

谢谢, 约翰。

【问题讨论】:

    标签: wpf layout expander dockpanel


    【解决方案1】:

    目前还不清楚Expanders 中有哪些 UI 元素,但例如 ListBox 可以正常工作,当项目数大于 Grid 行中分配的空间时,它会显示滚动条.

    但您也可以将 StackPanel 中的项目列表包装在 ScrollViewer 中,这也可以正常工作:

    <Expander Grid.Row="0" Header="Expander 1" x:Name="expander1" FontSize="14" IsExpanded="True">
      <Expander.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
          <GradientStop Color="#FFC4C4C4" Offset="0" />
          <GradientStop Color="White" Offset="1" />
        </LinearGradientBrush>
      </Expander.Background>
      <ScrollViewer>
        <StackPanel>
          <TextBlock>Test</TextBlock>
          <TextBlock>Test</TextBlock>
          <TextBlock>Test</TextBlock>
          <!-- etc.. -->
          <!-- etc.. -->
        </StackPanel>
      </ScrollViewer>
    </Expander>
    

    这也应该适合你。

    【讨论】:

    • 感谢 Magnus 的输入,但这似乎不起作用。我可能不清楚 - 我希望网格的内容(目前是 ContentPresenter)可见。我尝试使用 ClipToBounds="True" 依赖属性,但这似乎不起作用。
    • 对不起,这个星期一我一定很笨,但我不明白。您能否使用实际描述您的问题的内容更新您的示例 XAML?您指出项目列表的(大小)是罪魁祸首,据我所知,无论大小如何,我的示例都可以正常工作。无论列表大小如何,两个扩展器都是可见的。因此,请至少对一些展示您的问题的内容进行硬编码。
    • 我更新了代码并删除了带有我现在在Expanders 中的实际内容的 cmets。再次感谢您的帮助!
    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 2017-08-07
    • 2013-02-12
    • 2014-10-15
    • 2011-02-19
    • 2013-05-02
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多