XAML Datagrid列宽度问题

时间:2013-01-31 13:28:27

标签: wpf width wpfdatagrid

我有WPF数据网格。我想用

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

我写了下面的xaml代码。但宽度不符合要求。

修改 问题:相反,第二列文本被截断。

截图:

enter image description here

有什么建议吗? 谢谢!

    <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>

1 个答案:

答案 0 :(得分:1)

在应用Scott提出的其他stackoverflow帖子“DataGrid column width doesn't auto-update”之后的解决方案后,问题已得到解决。

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