0

私はWPFデータグリッドを持っています。使いたい

i) 「説明」テキストブロックの最大幅 (1 列目に表示)
ii) イメージ コントロールの自動幅 (1 列目に表示) および
iii) 残りの列の「自動」幅。

以下のxamlコードを書きました。しかし、幅は要件どおりに機能していません。

編集 の問題: 代わりに、2 列目のテキストが切り捨てられます。

スクリーンショット:

ここに画像の説明を入力

助言がありますか?ありがとう!

    <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

他のスタックオーバーフローの投稿「DataGrid column width does not auto-update」で Scott によって提案された以下のソリューションを適用した後、問題は解決しました。

1) DataGridTextColumn Bindings (* サイズの列を除くすべて) で、NotifyTargetUpdated=True を設定します。
2) DataGrid で、ハンドラーを TargetUpdated イベントに追加します。
3) TargetUpdated イベント ハンドラーで:
-- a) DataGrid の * サイズの列の幅を 0 に設定し
ます。 -- b) DataGrid で UpdateLayout() メソッドを呼び出します。
-- c) DataGrid の * サイズの列の幅を新しい DataGridLength(1, DataGridLengthUnitType.Star) に戻します。

于 2013-02-25T07:36:01.707 に答える