如何使最后一个DataGrid列占据整个左侧空间?

14

首先!我知道这似乎是一种重复的感觉,但实际上并不是。

我有一个网格作为DataGrid.RowDetails的数据模板。 它有三列:前两列使用Width="Auto",第三列使用Width="*"

<DataTemplate x:Key="NotEmptyDistributionsTemplateKey">
    <DataGrid ItemsSource="{Binding SoftwareVersionDistributions}"
        CanUserAddRows="False"
        CanUserDeleteRows="False"
        CanUserReorderColumns="False"
        CanUserResizeColumns="True"
        CanUserSortColumns="False"
        IsReadOnly="True"
        CanUserResizeRows="False"
        AutoGenerateColumns="False"
        RowHeaderWidth="0"
        Margin="20,5"
        HorizontalAlignment="Stretch">
        <DataGrid.Columns>
            <DataGridTextColumn 
                Header="Architecture" 
                Binding="{Binding SoftwareArchitecture.Name, TargetNullValue=Все, FallbackValue=Все}"
                Width="Auto"/>
            <DataGridTextColumn 
                Header="Language" 
                Binding="{Binding SysCodepage.Title, TargetNullValue=Все, FallbackValue=Все}" 
                Width="Auto"/>
            <DataGridHyperlinkColumn 
                Header="Link" 
                Binding="{Binding DownloadLink}"
                Width="*" 
                CanUserResize="False"/>
        </DataGrid.Columns>
    </DataGrid>
</DataTemplate>

如果网格嵌套在单元格中,则此模板会显示确切的3列。 但是,当它用作RowDetaislTemplate时,第4个空列会出现。 这让我很生气。

有人有想法为什么会发生这种情况吗?

更新1。它的外观如下:

enter image description here

更新2

最终我找到了解决方法。只需添加ScrollViewer.HorizontalScrollBarVisibility="Disabled"

现在没问题了:

enter image description here

但我无法理解这种奇怪的行为。

更新3(可能对某些人有帮助)

最近,我们发现了一个我们的用户有但开发人员没有的错误。该错误再次涉及DataGrid的宽度和对齐方式。好吧,也许这并不是真正的错误,但控件的行为确实有所不同。
研究表明,安装.net framework 4.5安装程序还更新了.net framework 4.0。这个更新以某种方式改变了DataGrid的行为。(变成了预期的行为)
我们要求用户安装框架4.5,问题就消失了。尽管我们的应用程序仍针对.net 4.0


你能发一张截图吗?我怀疑问题出在父网格中设置了一个*宽度的列上。 - Charleh
@Charleh。我明天会发布截图。 - Pavel Voronin
如果您将位于DataTemplate中的DataGrid放置在Grid或StackPanel中,会发生什么? - William
实际上,我想我弄清楚了发生了什么。问题类似于DataGrid具有HorizontalAlignment = Stretch且列不足的情况。我建议手动设置最后一列的宽度(这可能不切实际),或将每个列的Width属性绑定到ViewModel中的某些内容,然后计算最后一列的宽度。或者,如果DG不必占据其容器的整个宽度,则将HorizontalAlignment = Left。 - William
2
我认为最好你把答案写成一个回答。我没注意到你已经找到了解决方案。 - Johan Larsson
显示剩余2条评论
1个回答

7

终于我找到了解决方案。

只需添加ScrollViewer.HorizontalScrollBarVisibility="Disabled"

针对Framework v4.0的用户
最近,我们发现我们的用户遇到了开发人员没有发现的问题。这个问题又与DataGrid的宽度和对齐有关。好吧,也许这并不是真正的错误,但我们有了不同的控制行为。 研究发现,安装 .net framework 4.5 安装程序还更新了 .net framework 4.0。这个更新改变了DataGrid的行为(达到了期望的效果) 我们要求我们的用户安装框架4.5,这个问题就消失了。虽然我们的应用仍然针对 .net 4.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接