【问题标题】:Grid not stretching over the whole dockpanel网格没有延伸到整个停靠面板
【发布时间】:2012-02-26 05:46:10
【问题描述】:

我在使网格(用户列表)没有垂直延伸到停靠面板的整个可用空间时遇到问题。

我的简化网格在 UserControl 中:

<Grid Name="MainGrid" Background="Black">
     <Grid.RowDefinitions>
          <RowDefinition Height="*" />
     </Grid.RowDefinitions>
     <DataGrid Name="UserDataGrid" ItemsSource="{Binding UsersProfiles, Mode=OneWay}" 
               AutoGenerateColumns="False" Margin="5" Grid.Row="0">
         <DataGrid.Columns>
             <DataGridTextColumn Header="User Id" Binding="{Binding UserIdentifier}"
                                   Width="100" IsReadOnly="True" />
         </DataGrid.Columns>
     </DataGrid>

我的窗口很简单:

<DockPanel Background="Yellow">
    <ContentControl Content="{Binding UserView}" Background="Red"/>
</DockPanel>

主窗口后面的 ViewModel 通过 UserView 正确返回 userControl。 Grid 水平拉伸但不垂直拉伸。为什么?

【问题讨论】:

  • 问题可能是 DockPanel 本身没有垂直拉伸到它的容器中。我建议您首先向ContentControl 元素添加一个DockPanel.Dock= 属性,看看是否会有所不同。
  • 你确定它不是垂直拉伸的吗?将DataGrid 的Background 颜色更改为测试。 DataGrid Rows 不会拉伸,但 DataGrid 本身会。如果您希望行项目垂直拉伸,您需要实现自己的Template,或使用不同的控件,例如将ItemsPanel 设置为Grid 的ItemsControl 设置为Grid

标签: wpf xaml layout user-controls grid


【解决方案1】:

您可能只需要在您的DockPanel 上指定LastChildFill 到True。否则,DataGrid 可能不会调整大小,因为它并非旨在占用所有可用的垂直空间。

在后一种情况下,您可以这样做:

<DataGrid>
    <DataGrid.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid />
        </ItemsPanelTemplate>
    </DataGrid.ItemsPanel>
</DataGrid>

【讨论】:

  • 没有成功 UserControl.Resources>
  • 抱歉格式不正确 我是新手。用我的代码尝试了一个新的空项目(没有你的建议),它可以工作。该死的恼人......它是一样的 - 几乎我的第一个项目要先进得多。
【解决方案2】:

找到了。我的错。我所有的 xaml 在代码后面都有 Height = 30 。真倒霉!从复制/粘贴开始。感谢大家的贡献!

【讨论】:

    猜你喜欢
    • 2018-01-27
    • 2013-06-08
    • 2019-06-10
    • 2017-04-13
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多