为了账号安全,请及时绑定邮箱和手机立即绑定

WPF MVVM DataGrid 内容不适合行高变化

WPF MVVM DataGrid 内容不适合行高变化

C#
qq_花开花谢_0 2022-11-13 15:47:55
我需要使我的行高可变,以便我可以允许某些行添加其他信息。设置RowHeight值似乎没有任何区别。DataGridTextColumn由于所有内容都已绑定 (MVVM) ,因此在 的级别没有要设置高度的值。            <Border Grid.Row="1"       Grid.Column="1"                    HorizontalAlignment="Right" Margin="9" Width="auto" Visibility="{Binding LogVisibility}" VerticalAlignment="Stretch">        <DataGrid AutoGenerateColumns="False" VerticalContentAlignment="Center" ItemsSource="{Binding EventLog}" RowHeight="100" Background="White" CellStyle="{StaticResource cellStyle}" ColumnHeaderStyle="{StaticResource headerStyle}" CanUserAddRows="False">            <DataGrid.Columns>                <DataGridTemplateColumn Header="Type" SortMemberPath="CategoryDescription">                    <DataGridTemplateColumn.CellTemplate>                        <DataTemplate>                            <StackPanel Orientation="Horizontal">                                <Image Source="{Binding Image}" MaxHeight="15" MaxWidth="15" VerticalAlignment="Center"/>                                <TextBlock Text=" "/>                                <TextBlock Text="{Binding CategoryDescription}" TextWrapping="Wrap"/>                            </StackPanel>                        </DataTemplate>                    </DataGridTemplateColumn.CellTemplate>                </DataGridTemplateColumn>                <!--<DataGridTextColumn Header="Type" Binding="{Binding CategoryDescription}"></DataGridTextColumn>-->                <DataGridTextColumn Header="Date" Binding="{Binding Date}"/>                <DataGridTextColumn Header="Details" Binding="{Binding TypeDescription}" MaxWidth="400"/>            </DataGrid.Columns>        </DataGrid>    </Border>设置的值RowHeight="{x:Static sys:Double.NaN}"不会改变任何东西,而是看到截断的文本,如下所示:
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

是的,如果您为 DataGridTextColumn 添加带有文本块包装的自定义样式,这是可能的


<DataGridTextColumn.ElementStyle>

   <Style>

       <Setter Property="TextBlock.TextWrapping" Value="Wrap" />

   </Style>

</DataGridTextColumn.ElementStyle>

您只需要将 TextWrapping 添加为Wrap或WrapWithOverflow您可以在此处查看差异。另外要使其工作,您需要删除RowHeight或者您可以将其更改为


RowHeight="100"


MinRowHeight="100"

它确保您的行高至少为 100,并且如果文本不适合 - 该特定行的大小可以变长,但对于原始行高,它不能更改大小并且所有行的高度都固定为 100。顺便说一句,100 似乎太高了,可能 20-ish 会很整洁。


试试这段代码,我还在 Justify 中添加了 TextAlignment 以防你发现它有用。


        <Border Grid.Row="1"

                Grid.Column="1"

                Width="auto"

                Margin="9"

                HorizontalAlignment="Right"

                VerticalAlignment="Stretch"

                Visibility="{Binding LogVisibility}">

            <DataGrid VerticalContentAlignment="Center"

                      AutoGenerateColumns="False"

                      Background="White"

                      CanUserAddRows="False"

                      CellStyle="{StaticResource cellStyle}"

                      ColumnHeaderStyle="{StaticResource headerStyle}"

                      ItemsSource="{Binding EventLog}"

                      MinRowHeight="20">

                <DataGrid.Columns>

                    <DataGridTemplateColumn Header="Type"

                                            SortMemberPath="CategoryDescription">

                        <DataGridTemplateColumn.CellTemplate>

                            <DataTemplate>

                                <StackPanel Orientation="Horizontal">

                                    <Image MaxWidth="15"

                                           MaxHeight="15"

                                           VerticalAlignment="Center"

                                           Source="{Binding Image}" />

                                    <TextBlock Text=" " />

                                    <TextBlock Text="{Binding CategoryDescription}"

                                               TextWrapping="Wrap" />

                                </StackPanel>

                            </DataTemplate>

                        </DataGridTemplateColumn.CellTemplate>

                    </DataGridTemplateColumn>

                    <!--<DataGridTextColumn Header="Type" Binding="{Binding CategoryDescription}"></DataGridTextColumn>-->

                    <DataGridTextColumn Binding="{Binding Date}"

                                        Header="Date" />

                    <DataGridTextColumn MaxWidth="400"

                                        Binding="{Binding TypeDescription}"

                                        Header="Details">

                        <DataGridTextColumn.ElementStyle>

                            <Style>

                                <Setter Property="TextBlock.TextWrapping" Value="Wrap" />

                                <Setter Property="TextBlock.TextAlignment" Value="Justify" />

                            </Style>

                        </DataGridTextColumn.ElementStyle>

                    </DataGridTextColumn>

                </DataGrid.Columns>

            </DataGrid>

        </Border>


查看完整回答
反对 回复 2022-11-13
  • 1 回答
  • 0 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信