【问题标题】:How to resize height of parent to the height of its children?如何将父级的高度调整为其子级的高度?
【发布时间】:2012-02-18 03:00:30
【问题描述】:

我正在开发一个我和同事正在开发的应用程序的 GUI。有一个 GUI 错误一直困扰着我,我一直无法弄清楚如何修复。

在我的 GUI 中有一个网格。其中一列是我可以按下的向下箭头图像。当您单击箭头时,它将展开附加信息。我使用 RowDetailsTemplate 获取更多信息。当您再次单击它时,附加信息将消失。我使用 Mouse_Down 事件将行详细信息的可见性从可见更改为折叠,反之亦然。

问题是,在我折叠附加信息后,网格的大小仍然会扩大,好像是为了适应附加信息。但是附加信息的可见性已经设置为折叠,为什么我的网格没有变回原来的高度?如何将 datagridrow 的高度调整为其子项的大小?

编辑:

这是我最初将 rowdetails 设置为折叠的 gridrow:

<DataGrid Grid.Row="1" ItemsSource="{Binding ReadUnits}" BorderThickness="0" Name="dataGrid" RowDetailsVisibilityMode="Collapsed" HeadersVisibility="Column" GridLinesVisibility="Horizontal" VerticalScrollBarVisibility="Disabled" >

这是要点击的图片所在的代码。该行正在继承此数据模板。这是我可以创建 Mouse Down 事件的原因。

<DataGridTemplateColumn Header="" Width="30">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Image Name="navigationImage" Source=".../expand.png" Width="16" Height="16" MouseDown="navigationImage_MouseDown" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

这就是活动的所在。这将设置行详细信息的可见性。

private void navigationImage_MouseDown(object sender, MouseButtonEventArgs e)
    {
        FrameworkElement frameworkElement = (FrameworkElement)sender;
        Image image = (Image)sender;

        DataGridRow dataGridRow = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromItem(frameworkElement.DataContext);
        if (dataGridRow.DetailsVisibility == Visibility.Collapsed)
        {
            dataGridRow.DetailsVisibility = Visibility.Visible;
            BitmapImage icon = new BitmapImage(new Uri(".../collapse.png"));
            image.Source = icon;
        }
        else
        {
            dataGridRow.DetailsVisibility = Visibility.Collapsed;
            BitmapImage icon = new BitmapImage(new Uri(".../expand.png"));
            image.Source = icon;
        }
    }

【问题讨论】:

  • 如果您可以发布一些示例代码来演示该问题,这将有所帮助。
  • @Phil,添加了一些有问题的代码。
  • 您的代码使用简单的 RowDetailsTemplate 即可为我工作。尝试使用一个简单的模板,看看是否可行。我使用的是 .NET 4,你呢?
  • @Phil,是的,我使用的是 .Net 4。我将模板更改为一个简单的文本块,但问题仍然存在。

标签: wpf xaml


【解决方案1】:

这取决于您为托管具有“附加信息”的网格而创建的行高和行。在您的行定义中尝试将高度设置为“自动”..

像这样..

<RowDefinition Height="Auto"></RowDefinition>

【讨论】:

    【解决方案2】:

    因此,在尝试通过蛮力解决我的问题并使用看起来不太理想的代码后,我决定尝试更多地搜索网络并找到解决我问题的答案:http://social.msdn.microsoft.com/Forums/da-DK/wpf/thread/a0e7aea8-e9ad-441f-a775-1178aab75fb0

    我似乎通过设置一个完全不相关的设置解决了这个问题。

    在我的子网格中,我将 ScrollViewer.CanContentScroll 设置为 True。 一旦我在所有子网格中将其设置为 False,它似乎神奇地 工作。现在,当我折叠行详细信息时,它会调整包含行的大小 适当地。如果你能帮助我,我想看看的一件事 正在确定是解释这是如何解决问题的。

    我相信发生的事情是当我展开下拉列表时,滚动查看器正在做它的事情,但滚动查看器只是不可见但仍然存在并且随着孩子变大而扩展父网格。禁用滚动查看器后,问题就消失了。

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2020-07-30
      • 1970-01-01
      • 2013-03-25
      • 2010-11-10
      相关资源
      最近更新 更多