Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用包含包装文本块的DataGrid调整大小问题_C#_Wpf_Layout_Datagrid - Fatal编程技术网

C# 使用包含包装文本块的DataGrid调整大小问题

C# 使用包含包装文本块的DataGrid调整大小问题,c#,wpf,layout,datagrid,C#,Wpf,Layout,Datagrid,我对.NET4.0DataGrid有一个非常令人不安的问题。我有比例模板列,其中包含启用了textWrapping的TextBlock 问题是,数据网格的高度在加载时是不正确的(它的大小就像textblock都是以最大值包装的一样),并且在调整大小时不会更新它们的大小。这似乎是一个布局问题(比例大小未解决时,似乎会调用MeasureOverride和ArrangeOverride,之后也不会调用…),但我无法解决它 下面是一个显示问题的简化代码: main window.xaml <Win

我对.NET4.0DataGrid有一个非常令人不安的问题。我有比例模板列,其中包含启用了textWrapping的TextBlock

问题是,数据网格的高度在加载时是不正确的(它的大小就像textblock都是以最大值包装的一样),并且在调整大小时不会更新它们的大小。这似乎是一个布局问题(比例大小未解决时,似乎会调用MeasureOverride和ArrangeOverride,之后也不会调用…),但我无法解决它

下面是一个显示问题的简化代码:

main window.xaml

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="700" Width="525">
<StackPanel Width="500">
    <Button Content="Add DataGrid" Click="Button_Click" />
    <ItemsControl x:Name="itemsControl">
        <ItemsControl.ItemContainerStyle>
            <Style>
                <Setter Property="Control.Margin" Value="5" />
            </Style>
        </ItemsControl.ItemContainerStyle>
    </ItemsControl>
</StackPanel>
}


我终于想出了一个相当糟糕的解决方案,但至少它起作用了:我正在通过计算正确的值手动更新网格的高度,同时考虑行高度、网格填充、网格边框和列头错误高度。我需要在OnPropertyChanged(用于填充和网格边框)、DataGridColumn.SizeChanged、DataGridColumn.RowUnload、ColumnHeaderPresenter.SizeChanged和其他一些文件上更新它


唯一的问题是它与默认DataGrid ControlTemplate一起正常工作,但如果模板要更改网格渲染,它将不再正确。

最终找到了一个解决方案:在DataGrid上将CanContentScroll设置为false修复了该问题

<Setter Property="ScrollViewer.CanContentScroll" Value="False" />

<Setter Property="ScrollViewer.CanContentScroll" Value="False" />