0

我有 WPF 数据网格。我想用

i)“描述”文本块的最大可用宽度(存在于第一列内)
ii)图像控件的自动宽度(存在于第一列内)和
iii)列其余部分的“自动”宽度。

我已经编写了以下 xaml 代码。但是宽度不能按要求工作。

编辑 问题:相反,第二列文本被截断。

截屏:

在此处输入图像描述

有什么建议么?谢谢!

    <Grid Margin="10,0,10,0">

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <DataGrid Grid.Row="0" Grid.ColumnSpan="2"  ItemsSource="{Binding SelectedItemsCollectionView}" HorizontalAlignment="Stretch" AutoGenerateColumns="False">


            <DataGrid.Columns>
                <!--Get maixmum available space for 1st Column-->
                <DataGridTemplateColumn Width="*">

                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid Margin="5,0,0,0">
                                <Grid.ColumnDefinitions>

                                   <!--Get "Auto" space for Image control-->
                                    <ColumnDefinition Width="Auto" />

                                   <!--Get remaining available space for Description textblock-->  
                                    <ColumnDefinition Width="*" ></ColumnDefinition>

                                </Grid.ColumnDefinitions>

                                <Image Grid.Column="0" Stretch="None" Margin="0,0,5,0" Source="{Binding Converter={StaticResource ShowHideToImageConverterRef}, Path=IsHidden}"
                                       Visibility="{Binding Converter={StaticResource VisibilityConverterRef}, Path=RowType}" HorizontalAlignment="Center"/>
                                <TextBlock Grid.Column="1" Text="{Binding Description}"  VerticalAlignment="Center" HorizontalAlignment="Left" />
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <!--Get "Auto" space for 2nd Column-->
                <DataGridTextColumn Binding="{Binding Comments}" Width="Auto"   /> 

            </DataGrid.Columns>
        </DataGrid>

        <Label Grid.Row="1" Grid.Column="0" Content="Name"  ></Label>
        <TextBox Grid.Row="1" Grid.Column="1" Margin="10,0,0,0" Text="{Binding EmpName}"/>

    </Grid>
4

1 回答 1

1

在应用 Scott 在其他 stackoverflow 帖子“ DataGrid column width doesn't auto-update ”上建议的以下解决方案后,问题已解决。

1)在您的 DataGridTextColumn 绑定(除您的 * 大小列之外的所有列)中设置 NotifyTargetUpdated=True。
2) 在您的 DataGrid 上,将处理程序添加到 TargetUpdated 事件。
3) 在 TargetUpdated 事件处理程序中:
-- a) 将 DataGrid 的 * 大小列的宽度设置为 0。
-- b) 在 DataGrid 上调用 UpdateLayout() 方法。
-- c) 将 DataGrid 的 * 大小列的宽度设置回 new DataGridLength(1, DataGridLengthUnitType.Star)

于 2013-02-25T07:36:01.707 回答