C# 在材质设计中使用datagrind允许行增长和文本换行

C# 在材质设计中使用datagrind允许行增长和文本换行,c#,wpf,material-design,C#,Wpf,Material Design,我正在努力寻找如何使用材质设计在数据网格中扩展行。基本上,如果一个单元格已满,我需要将字符串包装在单元格中,并允许行扩展以适应此情况。数据是从SQL数据库中提取的,因此这就是我目前拥有的XAML <DataGrid x:Name="tblProcesses" AutoGenerateColumns="False" CanUserAddRows="True" BorderThickness="1"

我正在努力寻找如何使用材质设计在数据网格中扩展行。基本上,如果一个单元格已满,我需要将字符串包装在单元格中,并允许行扩展以适应此情况。数据是从SQL数据库中提取的,因此这就是我目前拥有的XAML

<DataGrid x:Name="tblProcesses" AutoGenerateColumns="False" CanUserAddRows="True"
        BorderThickness="1" BorderBrush="{DynamicResource PrimaryHueMidBrush}" DockPanel.Dock="Top">

    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding order, UpdateSourceTrigger=PropertyChanged}" ClipboardContentBinding="{x:Null}" Header="Order" Width="80"/>
        <DataGridTextColumn Binding="{Binding title, UpdateSourceTrigger=PropertyChanged}" ClipboardContentBinding="{x:Null}" Header="Process" Width="*"/>
        <DataGridTextColumn Binding="{Binding description, UpdateSourceTrigger=PropertyChanged}" ClipboardContentBinding="{x:Null}" Header="Description" Width="2*"/>
        <DataGridTextColumn Binding="{Binding imageURL, UpdateSourceTrigger=PropertyChanged}" ClipboardContentBinding="{x:Null}" Header="Image URL" Width="100"/>
        <DataGridTextColumn Binding="{Binding timeTaken, UpdateSourceTrigger=PropertyChanged}" ClipboardContentBinding="{x:Null}" Header="Time Taken" Width="100"/>
    </DataGrid.Columns>
                    
</DataGrid>


还有如果我绑定数据的方式是最有效的方式?它的工作方式与我预期的一样(不包括文本包装),但是我想看看专业人士如何解决这个问题。

您可以这样做,并为特定列指定
ElementStyle

<DataGrid.Columns>               
    <DataGridTextColumn Header="Wrapped & centered" Binding="{Binding field}">
        <DataGridTextColumn.ElementStyle>
             <Style>                            
                 <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
                 <Setter Property="TextBlock.TextAlignment" Value="Center"/>
             </Style>
         </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>
</DataGrid.Columns>  

也可以通过在窗口资源中定义样式来实现

<Window.Resources>
    <Style TargetType="{x:Type TextBlock}" x:Key="WrapText">
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
</Window.Resources>

<DataGrid.Columns>
    <DataGridTextColumn IsReadOnly="False" Header="Address" 
     Binding="{Binding Address}" ElementStyle="{StaticResource WrapText}" Width="150"/>
</DataGrid.Columns>  


它将包装单元格的内容,而不是剪切或剪裁它。

您可以这样做,并为特定列指定
ElementStyle

<DataGrid.Columns>               
    <DataGridTextColumn Header="Wrapped & centered" Binding="{Binding field}">
        <DataGridTextColumn.ElementStyle>
             <Style>                            
                 <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
                 <Setter Property="TextBlock.TextAlignment" Value="Center"/>
             </Style>
         </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>
</DataGrid.Columns>  

也可以通过在窗口资源中定义样式来实现

<Window.Resources>
    <Style TargetType="{x:Type TextBlock}" x:Key="WrapText">
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
</Window.Resources>

<DataGrid.Columns>
    <DataGridTextColumn IsReadOnly="False" Header="Address" 
     Binding="{Binding Address}" ElementStyle="{StaticResource WrapText}" Width="150"/>
</DataGrid.Columns>  

它将包装单元格内容,而不是剪切或剪裁单元格内容