【发布时间】: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。我将模板更改为一个简单的文本块,但问题仍然存在。